在Java中,将微秒转换为毫秒而不损失精度和格式作为日期时间
如何将以在Java中,将微秒转换为毫秒而不损失精度和格式作为日期时间,java,timeunit,Java,Timeunit,如何将以微秒为单位的传入长时间值转换为毫秒,然后将其格式化为数据时间戳,如下所示: yyyyMMdd HH:mm:ss.SSS 我使用JavaSimpleDataFormat将长值格式化为时间戳。但是,将微秒转换为毫秒似乎是个问题,因为我正在丢失该值 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-HH:mm:ss.SSS"); 要将微秒转换为毫秒,我使用的是时间单位: long micro //microseconds long m
微秒为单位的传入长时间值转换为毫秒
,然后将其格式化为数据时间戳,如下所示:
yyyyMMdd HH:mm:ss.SSS
我使用JavaSimpleDataFormat
将长值格式化为时间戳。但是,将微秒转换为毫秒似乎是个问题,因为我正在丢失该值
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-HH:mm:ss.SSS");
要将微秒转换为毫秒,我使用的是时间单位:
long micro //microseconds
long milli = TimeUnit.MILLISECONDS.convert(micro, TimeUnit.MICROSECONDS);
在不丢失任何数据的情况下转换值的正确方法是什么
我正在使用java SimpleDataFormat
不要这样做。
避免与最早版本的Java捆绑在一起的危险的旧日期时间类。几年前,当JSR310被采用时,它们被java.time类取代
将传入的长时间值转换为
不要这样做。
time类使用的分辨率为,比微秒还要精细。因此,无需丢弃数据
Instant
=(整秒+分数秒为毫微秒)
提取整秒数
long seconds = TimeUnit.MICROSECONDS.toSeconds( micros ) ;
long microsRemaining =
micros
-
TimeUnit.SECONDS.toMicros( seconds )
;
得到分数秒,减去整秒后剩余的微秒数
long seconds = TimeUnit.MICROSECONDS.toSeconds( micros ) ;
long microsRemaining =
micros
-
TimeUnit.SECONDS.toMicros( seconds )
;
将剩余的微秒转换为纳秒,因为我们接下来使用的Instant
类表示整秒的计数加上纳秒的计数(分数秒)
以纳秒为单位,将整秒与分数秒合并。该类表示自UTC 1970年第一个时刻(1970-01-01T00:00Z)的历元参考以来的UTC时刻计数
Instant instant = Instant.ofEpochSecond( seconds ).plusNanos( nanos ) ;
要生成标准ISO 8601格式的字符串,只需调用toString
String output = instant.toString() ;
字符串末尾的Z
表示UTC(与UTC的偏移量为零小时分秒),发音为Zulu
您可以使用DateTimeFormatter
类以自己的自定义格式生成字符串。因为这已经被讨论过很多次了
提示:您所需的格式非常接近ISO 8601格式,YYYY-MM-DDTHH:MM:SSZ,因此我强烈建议使用标准格式,而不是自己制作
如果您希望通过某个地区(时区)的人使用的挂钟时间来查看同一时刻,请应用ZoneId
以获取zoneDateTime
ZoneId z = ZoneId.of( "Africa/Tunisia" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*
类
从哪里获得java.time类
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- Java9添加了一些次要功能和修复
- 及
- 大多数java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(
我正在使用java SimpleDataFormat
不要这样做。
避免与最早版本的Java捆绑在一起的危险的旧日期时间类。多年前,当采用JSR310时,它们被Java.time类取代
将传入的长时间值转换为
不要这样做。
time类使用的分辨率为,比您的微秒还要精细,因此无需丢弃数据
Instant
=(整秒+分数秒为毫微秒)
提取整秒数
long seconds = TimeUnit.MICROSECONDS.toSeconds( micros ) ;
long microsRemaining =
micros
-
TimeUnit.SECONDS.toMicros( seconds )
;
得到分数秒,减去整秒后剩余的微秒数
long seconds = TimeUnit.MICROSECONDS.toSeconds( micros ) ;
long microsRemaining =
micros
-
TimeUnit.SECONDS.toMicros( seconds )
;
将剩余的微秒转换为纳秒,因为我们接下来使用的Instant
类表示整秒的计数加上纳秒的计数(分数秒)
将整秒与以纳秒为单位的分数秒相结合。该类表示自UTC 1970年第一个时刻(1970-01-01T00:00Z)的历元参考以来的UTC时刻计数
Instant instant = Instant.ofEpochSecond( seconds ).plusNanos( nanos ) ;
要生成标准ISO 8601格式的字符串,只需调用toString
String output = instant.toString() ;
字符串末尾的Z
表示UTC(与UTC的偏移量为零小时分秒),发音为Zulu
您可以使用DateTimeFormatter
类以自己的自定义格式生成字符串
提示:您所需的格式非常接近ISO 8601格式,YYYY-MM-DDTHH:MM:SSZ,因此我强烈建议使用标准格式,而不是自己制作
如果您希望通过某个地区(时区)的人使用的挂钟时间来查看同一时刻,请应用ZoneId
以获取zoneDateTime
ZoneId z = ZoneId.of( "Africa/Tunisia" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*
classes
从哪里获得java.time类
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- Java9添加了一些次要功能和修复
- 及