This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
galaxy-tsg-olap-log-stream-…/src/test/java/com/zdjizhi/function/TimestampTest.java
wangchengcheng 5c0a108393 1.适配TSG 23.07及以上功能,添加数据传输统计指标,并输出至pushgateway。(GAL-409)
2.原URL参数domain从http_domain字段取值,更新为从common_server_domain字段取值。(GAL-410)
2023-09-28 15:59:26 +08:00

90 lines
3.5 KiB
Java

package com.zdjizhi.function;
import org.junit.Test;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.concurrent.TimeUnit;
public class TimestampTest {
@Test
public void timestampToDate() {
System.out.println(getLocalDateTime(1693905281L, 0, "Asia/Shanghai"));
System.out.println(getLocalDateTime(1693905281048L, 3, "Asia/Shanghai"));
System.out.println(getLocalDateTime(1693905281048L, 6, "Asia/Shanghai"));
System.out.println(getLocalDateTime(1693905281048L, 9, "UTC+03:00"));
System.out.println(getZoneDateTime(1693905281L, 3, "Asia/Shanghai"));
System.out.println(getZoneDateTime(1693905281048L, 6, "Asia/Shanghai"));
}
@Test
public void timestampConversion() {
long nanosTimestamp = 1630988475000000000L; // 纳秒级时间戳
System.out.println("纳秒级时间戳: " + timestampToSeconds(nanosTimestamp));
long microsTimestamp = 1630988475000000L; // 微秒级时间戳
System.out.println("微秒级时间戳: " + timestampToSeconds(microsTimestamp));
long millisTimestamp = 1693969952127L; // 微秒级时间戳
System.out.println("毫秒级时间戳: " + timestampToSeconds(millisTimestamp));
long errorTimestamp = 169396995L; // 微秒级时间戳
System.out.println("异常时间戳: " + timestampToSeconds(errorTimestamp));
}
private Long timestampToSeconds(long timestamp) {
int timestampLength = Long.toString(timestamp).length();
switch (timestampLength) {
case 13:
return TimeUnit.MILLISECONDS.toSeconds(timestamp);
case 16:
return TimeUnit.MICROSECONDS.toSeconds(timestamp);
case 19:
return TimeUnit.NANOSECONDS.toSeconds(timestamp);
default:
// throw new RuntimeException("This timestamp:" + timestamp + " format is not nanosecond, microsecond, millisecond, or second");
return timestamp;
}
}
private String getLocalDateTime(Long timestamp, int precision, String timeZone) {
boolean isMillis = String.valueOf(timestamp).length() > 10;
String timePattern = "yyyy-MM-dd HH:mm:ss";
if (precision > 0) {
String s = String.join("", Collections.nCopies(precision, "S"));
timePattern = String.join(".", timePattern, s);
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timePattern);
Instant instant;
if (isMillis) {
instant = Instant.ofEpochMilli(timestamp);
} else {
instant = Instant.ofEpochSecond(timestamp);
}
return LocalDateTime.ofInstant(instant, ZoneId.of(timeZone)).format(formatter);
}
private String getZoneDateTime(Long timestamp, int precision, String timeZone) {
boolean isMillis = String.valueOf(timestamp).length() > 10;
String timePattern = "yyyy-MM-dd'T'HH:mm:ss.";
if (precision > 0) {
String s = String.join("", Collections.nCopies(precision, "S"));
timePattern = String.join("", timePattern, s, "XXX");
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timePattern);
Instant instant;
if (isMillis) {
instant = Instant.ofEpochMilli(timestamp);
} else {
instant = Instant.ofEpochSecond(timestamp);
}
return ZonedDateTime.ofInstant(instant, ZoneId.of(timeZone)).format(formatter);
}
}