SimpleDateFormat 带纳秒时间的处理

在JDK 1.8以下版本,对于带纳秒的时间串使用SimpleDateFormat 类进行格式化:

2018-05-18T20:20:53.420658997+08:00

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSXXX");

你会发现,结果与期望大相径庭。

如果只处理到毫秒(即.后只有3位小数),那倒没有问题,使用下面的模式可以搞定:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");

但是对于超过3位小数的则不可用了,见参考网页。

最简单的处理,精简秒后的时间位数,只保留3位(通常情况下够用,对精度影响较小):

	static String shortenTimeStr(String timestr){
		String[] parts = timestr.split("\\.");
		String[] parts2 = parts[1].split("\\+");
		String timestr2 = parts[0] + "." + parts2[0].substring(0, 3) + "+" + parts2[1];
		System.out.println("timestr2:" + timestr2);
		return timestr2;
	}
然后,再使用上述的SimpleDateFormat模式进行转换。

如果有谁有更好的方法,望不吝赐教。


参考:

1、Java date parsing with microsecond or nanosecond accuracy. https://stackoverflow.com/questions/30135025/java-date-parsing-with-microsecond-or-nanosecond-accuracy?rq=1

Instant和SimpleDateFormat是Java中处理时间格式化和转换的两个类。 1. Instant类是Java 8引入的一个时间类,用于表示时刻。它是不可变的,可以精确到纳秒级别,并且可以与时区无关。通过Instant类,我们可以方便地进行日期和时间的操作和计算。 2. SimpleDateFormat是一个旧的Java类,用于将Date对象格式化为指定的日期和时间字符串,或将日期和时间字符串解析为Date对象。它可以使用不同的模式来指定日期和时间的格式。 要将Instant对象转换为指定格式的时间字符串,可以使用DateTimeFormatter类(Java 8及以上版本)或SimpleDateFormat类(Java 7及以下版本)。 例如,要将Instant对象转换为"yyyy-MM-dd HH:mm:ss"格式的时间字符串,可以使用以下代码: Java 8及以上版本: ``` Instant instant = Instant.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDateTime = formatter.format(instant); ``` Java 7及以下版本: ``` Instant instant = Instant.now(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDateTime = formatter.format(Date.from(instant)); ``` 而要将指定格式的时间字符串解析为Instant对象,可以使用以下代码: Java 8及以上版本: ``` String dateTimeString = "2022-05-10 15:30:00"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); Instant instant = Instant.parse(dateTimeString, formatter); ``` Java 7及以下版本: ``` String dateTimeString = "2022-05-10 15:30:00"; SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = formatter.parse(dateTimeString); Instant instant = date.toInstant(); ``` 总结:Instant类是用于表示时刻的,SimpleDateFormat类是用于格式化和解析日期和时间字符串的。要将Instant对象转换为指定格式的时间字符串,可以使用DateTimeFormatter类或SimpleDateFormat类;要将指定格式的时间字符串解析为Instant对象,也可以使用DateTimeFormatter类或SimpleDateFormat类。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值