2016-04-26 325 views
0

这是我在Java 1.6的代码(问题被标记为重复的,但建议的解决方案是指Java的1.8)时间戳转换问题

public static void main(String[] args){ 
    try{ 
     String dateTimeString = "2015-08-10-14.20.40.679279"; 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSSSSS"); 
     java.util.Date formattedDate = dateFormat.parse(dateTimeString); 
     Timestamp formattedTime = new Timestamp(formattedDate.getTime()); 
     System.out.println(formattedTime); 
    } catch (Throwable t){ 
     t.printStackTrace(); 
    } 
} 

所得对象是:2015-08-10 14:31:59.279,这么清楚什么是错的,而解析分钟,秒和毫秒,我只是不知道究竟是什么。
谢谢!

+1

什么是'679279'? millis(看起来不正确)?秒的几分之一(即微秒,在这种情况下,由于日期API仅支持毫秒,您需要删除最后3位数)? – assylias

+0

提到的Java 8(java.time)功能的大部分被移植到[ThreeTen-Backport](http://www.threeten.org/threetenbp/)项目中的Java 6和7。在这里使用的麻烦的遗留类的巨大改进。而java.time类使用纳秒级分辨率(9位小数),因此它可以适应您的微秒级数据(6位小数位),而且不会丢失数据,也没有麻烦。 –

回答

2

没有类似SSSSSS的东西。 检查Simple Date Format manual

+0

是的,它说“millis”,所以你认为如果我把SSS它可以与6位数的输入正常工作? – urir

+0

不,它不会。截断最后3位数字。 – mariusz2108

+0

谢谢,我想我没有选择,只能松散这个数据 – urir

1

你要退学的最后3毫秒:

Date d = (new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS", Locale.US)).parse("2015-08-10-14.20.40.679279"); 
     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)); 

     Date dd = (new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS", Locale.US)).parse("2015-08-10-14.20.40.679"); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.S").format(dd)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SS").format(dd)); 
     System.out.println(new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS").format(dd)); 

得到正确的格式:

2015-08-10-14.31.59.279 
2015-08-10-14.31.59.279 
2015-08-10-14.31.59.279 
2015-08-10-14.20.40.679 
2015-08-10-14.20.40.679 
2015-08-10-14.20.40.679 

检查出来这个playground

+0

谢谢,看起来不错 – urir