Java8 LocalDateTime和NANO_OF_SECOND奇怪的格式化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java8 LocalDateTime和NANO_OF_SECOND奇怪的格式化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2092字,纯文字阅读大概需要3分钟。
内容图文
![Java8 LocalDateTime和NANO_OF_SECOND奇怪的格式化](/upload/InfoBanner/zyjiaocheng/754/e4bca04def5f4076956ba011e47657cd.jpg)
我试试这段代码:
import java.time.*;
...
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"dd-MMM-yyyy HH:mm:ss.n");
System.out.format("Now = %s %n", now.format(formatter));
为了获得具有亚秒信息的输出
现在= 2018年4月12日14:47:38.039578300
不幸的是,在每秒的前100毫秒中,亚秒信息的前导零被省略,我得到一个非常误导的输出Now = 12-Apr-2018 14:47:38.39578300,??这很容易被误解为大约38.4秒,完整秒后396毫秒,而不是真正的38.04秒.
我发现的唯一的工作方式是ss.nnnnnnnnn的格式,正好是9 n,以获得我想要的输出.
编辑:
有一些更好的东西,我在发布这个问题时在这方面错过了.
我对Nanoseconds并不是很感兴趣,但是我真正想要的是秒的一小部分(大约是ms分辨率).
然后,这个更合适
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSS");
大写字母S表示亚秒数字的数量,当然包括前导零.
解决方法:
如果只需要ms分辨率,则可以使用S代替n:
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("dd-MMM-yyyy HH:mm:ss.SSS", Locale.US);
这将只打印前3个小数位(即ms分辨率):
12-Apr-2018 14:47:38.039
请注意,我使用java.util.Locale来定义用于月份名称的语言.这是因为JVM可能并不总是设置为英语,结果可能不是您所期望的.例如:我的JVM设置为葡萄牙语,月份名称为“abr”.设置特定的区域设置可以消除此问题.
要打印所有9位数字,使用nnnnnnnnn或SSSSSSSSS将起作用.
当我们check the javadoc时,我们可以看到为什么它的行为如此.S和n有不同的表现:
Symbol Meaning Presentation Examples
------ ------- ------------ -------
S fraction-of-second fraction 978
n nano-of-second number 987654321
S是分数,而n是数字.文档告诉你区别:
Number: If the count of letters is one, then the value is output using the minimum number of digits and without padding.
Fraction: Outputs the nano-of-second field as a fraction-of-second. The nano-of-second value has nine digits, thus the count of pattern letters is from 1 to 9. If it is less than 9, then the nano-of-second value is truncated, with only the most significant digits being output.
因此,只有1 n将打印没有填充的值(开头没有0),导致你得到错误的输出,而SSS会给你正确的输出.
内容总结
以上是互联网集市为您收集整理的Java8 LocalDateTime和NANO_OF_SECOND奇怪的格式化全部内容,希望文章能够帮你解决Java8 LocalDateTime和NANO_OF_SECOND奇怪的格式化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。