请求
我需要将以秒为单位保存的时间->转换为“ HH:mm:ss”(以及将来的其他格式)。
例如。 9
秒-> "00:00:09"
。
但是,Calendar
类始终增加+1小时。我认为是因为我的时区(是"Europe/Prague"
)或夏令时。
测试中
首先简单使用Date
类。然后使用不同时区的Calendar
三次,尝试方法setTimeInMillis()
和set()
。
// Declarations
Calendar cal;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( format );
String result;
日期类用法:
// Simple Date class usage
Date date = new Date( timeInSecs * 1000 );
result = simpleDateFormat.format( date ); // WRONG result: "01:00:09"
带有“ GMT”的日历类:
// Calendar - Timezone GMT
cal = new GregorianCalendar( TimeZone.getTimeZone( "GMT" ) );
cal.setTimeInMillis( timeInSecs * 1000 );
result = simpleDateFormat.format( cal.getTime() ); // WRONG result: "01:00:09"
cal.set( 1970, Calendar.JANUARY, 1, 0, 0, timeInSecs );
result = simpleDateFormat.format( cal.getTime() ); // WRONG result: "01:00:09"
带有“ UTC”的日历类:
// Calendar - Timezone UTC
cal = new GregorianCalendar( TimeZone.getTimeZone( "UTC" ) );
cal.setTimeInMillis( timeInSecs * 1000 );
result = simpleDateFormat.format( cal.getTime() ); // WRONG result: "01:00:09"
cal.set( 1970, Calendar.JANUARY, 1, 0, 0, timeInSecs );
result = simpleDateFormat.format( cal.getTime() ); // WRONG result: "01:00:09"
具有“默认”的日历类-“欧洲/布拉格”:
// Calendar - Timezone "default" (it sets "Europe/Prague")
cal = new GregorianCalendar( TimeZone.getDefault() );
cal.setTimeInMillis( timeInSecs * 1000 );
result = simpleDateFormat.format( cal.getTime() ); // WRONG result: "01:00:09"
cal.set( 1970, Calendar.JANUARY, 1, 0, 0, timeInSecs );
result = simpleDateFormat.format( cal.getTime() ); // CORRECT result: "00:00:09"
在最后一种情况下,我得到了正确的结果,但是我不明白为什么。
问题
为什么最后一种情况有效? (而前一个不是吗?)
我应该如何使用Calendar类来简单地以秒为单位传递时间(不进行任何分析)?
还有另一种解决方案(另一类)吗?除了自行解析外。
最佳答案
TimeZone
(s)不同意Calendar
和SimpleDateFormat
(最后一个例子除外)。您可以使用SimpleDateFormat.setTimeZone(TimeZone)
设置相同的时区,它应该可以工作。
// Calendar - Timezone UTC
cal = new GregorianCalendar( TimeZone.getTimeZone( "UTC" ) );
cal.setTimeInMillis( timeInSecs * 1000 );
simpleDateFormat.setTimeZone( TimeZone.getTimeZone( "UTC" ) ); // <-- like so.
result = simpleDateFormat.format( cal.getTime() );
cal.set( 1970, Calendar.JANUARY, 1, 0, 0, timeInSecs );
result = simpleDateFormat.format( cal.getTime() );
关于java - 使用Calendar和SimpleDateFormat将时间转换为“HH:mm:ss”会增加1小时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26591706/