max*_*yme 31 java format timestamp date
刚刚在我的Windows(8)工作站和AIX上测试了这段代码:
public static void main(String[] args) {
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(new Date()));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(new Date()));
}
Run Code Online (Sandbox Code Playgroud)
并得到类似的结果:
2013-10-07 12:53:26.000905
2013-10-07 12:53:26.000906
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下,如果不是微秒,最后的数字是什么?
注意:我与DB2数据库交互,其中使用定时列作为TIMESTAMP存储按时间顺序排列的数据,其中6位数字在秒之后,即微秒(IMO).但是所有这些"时间戳"都是通过请求以下查询来创建的:
SELECT current timestamp as currenttimestamp FROM Table ( values (1)) temp
Run Code Online (Sandbox Code Playgroud)
我想知道,鉴于上述结果,我不能只使用我的代码new Date()
而不是current timestamp
从数据库中选择.
谢谢.
PS:我搜索但发现没有相关(已回答)的问题,例如: java中的当前时间(以微秒为单位) 或 以小时,分钟,秒,毫秒,微秒获取时间
ppe*_*rka 83
Letter Date or Time Component Presentation Examples
S Millisecond Number 978
Run Code Online (Sandbox Code Playgroud)
所以它是毫秒,或1/1000秒.你只需要用6位数字格式化它,所以你添加3个额外的前导零...
你可以这样检查:
Date d =new Date();
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(d));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS").format(d));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(d));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS").format(d));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSS").format(d));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").format(d));
Run Code Online (Sandbox Code Playgroud)
输出:
2013-10-07 12:13:27.132
2013-10-07 12:13:27.132
2013-10-07 12:13:27.132
2013-10-07 12:13:27.0132
2013-10-07 12:13:27.00132
2013-10-07 12:13:27.000132
Run Code Online (Sandbox Code Playgroud)
Instant.now()
.toString()
Run Code Online (Sandbox Code Playgroud)
2018-02-02T00:28:02.487114Z
Instant.parse(
"2018-02-02T00:28:02.487114Z"
)
Run Code Online (Sandbox Code Playgroud)
该接受的答案被ppeterka是正确的.滥用格式化模式会导致错误的数据显示,而内部值始终限制为毫秒.
你正在使用的麻烦SimpleDateFormat
和Date
类现在已经遗留下来,取而代之的是java.time类.该java.time类处理纳秒的分辨率,比更精细毫秒遗留类的限制.
相当于java.util.Date
是 java.time.Instant
.您甚至可以使用添加到旧类的新方法在它们之间进行转换.
Instant instant = myJavaUtilDate.toInstant() ;
Run Code Online (Sandbox Code Playgroud)
该Instant
级表示时间轴上的时刻UTC,分辨率为纳秒(最多9个(9)小数的位数).
捕获UTC中的当前时刻.Java 8以毫秒为单位捕获当前时刻,而Clock
Java 9中的新实现以更精细的粒度捕获时刻,通常为微秒,但这取决于计算机硬件时钟和操作系统和JVM实现的功能.
Instant instant = Instant.now() ;
Run Code Online (Sandbox Code Playgroud)
生成标准ISO 8601格式的字符串.
String output = instant.toString() ;
Run Code Online (Sandbox Code Playgroud)
2018-02-02T00:28:02.487114Z
要生成其他格式的字符串,请搜索Stack Overflow DateTimeFormatter
,已经多次覆盖.
要调整到UTC以外的时区,请使用ZonedDateTime
.
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Pacific/Auckland" ) ) ;
Run Code Online (Sandbox Code Playgroud)
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
.
现在处于维护模式的Joda-Time项目建议迁移到java.time类.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval
,YearWeek
,YearQuarter
,和更多.
归档时间: |
|
查看次数: |
96627 次 |
最近记录: |