2012-06-28 77 views
0

为什么如果我将日期从毫秒转换为日期,然后再转回,从日期转换为毫秒,那么该日期会发生变化?Java中的日期转换

例如:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
Date date = format.parse("2012-06-02"); 
System.out.println(date); 
Long dateAsDays = TimeUnit.MILLISECONDS.toDays(date.getTime()); 

System.out.println(
    new Date(
     TimeUnit.DAYS.toMillis(dateAsDays) 
    )); 

将被打印:

周六6月2日00:00:00 GMT + 03:00 2012

星期五6月1日3点00分○○秒格林威治标准时间+ 03:00 2012

我如何在这个转换中保存月份的一天?为什么这段代码无法正常工作?

+1

日期/时间的问题,您应该使用[乔达](HTTP://乔达时间.sourceforge.net /)项目,它提供了处理日期,时间和时间戳操作的简单方法。 –

+1

如果您有选择,可以使用JODA而不是内置的Java日期设施,这些设施已经有点破了。 –

+0

感谢您使用Joda的建议 – Kot4

回答

2

日期变得不太准确,当你得到它在几天。你在格林威治标准时间+3,所以格林威治标准时间12:00是你的3点。从TimeUnit class reference

转换

众长转换(长sourceDuration, TIMEUNIT sourceUnit)

转换给定的时间段在给定单位到本机。 从较细到较粗粒度的转换截断,因此失去精度。例如,将999毫秒转换为秒导致0。从粗粒度到更细粒度的转换,其中参数在数字上会溢出,如果为负,则饱和为Long.MIN_VALUE,如果为负,则为Long.MAX_VALUE。 例如,10分钟转换为毫秒,使用方法:TimeUnit.MILLISECONDS.convert(10L,TimeUnit.MINUTES)

+0

该方法的使用导致了一个例子中出现的问题。猜测,'TimeUnit'工具的使用不允许进行所需的转换。 – Kot4