使用metricbeat等一些服务的时候会遇到生成的消息中带T带Z的情况,而且还带毫秒值,很多时候对数据的精度要求没有很高,毫秒也扔掉了,z、t也直接replace掉了。今天强迫症犯了想原封不动的将这种格式的字符串时间转换成时间类型或者事件戳类型。
代码
public static void main(String[] args) {
//字符串时间,带T带Z带毫秒值
String stime = "2020-11-18T04:31:40.886Z";
//创建对应的pattern,注意T和Z两个字符使用单引号引起来,毫秒值使用大写S表示
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
//字符串时间转换成时间类型
LocalDateTime date = LocalDateTime.parse(stime, pattern);
//时间类型转时间戳类型
long ts = date.toInstant(ZoneOffset.of("+8")).toEpochMilli();
System.out.println(date+" \nts:"+ts);
}