我需要转换以秒为单位的时间 - >到" HH:mm:ss" (以及将来的其他格式)。
E.g。 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"
在最后一种情况下,我得到了正确的结果,但我不明白为什么。
答案 0 :(得分:1)
不知道你为什么要面对这个问题。但你可以简单地写一些类似的东西。
int hours = secs / 3600,
remainder = secs % 3600,
minutes = remainder / 60,
seconds = remainder % 60;
string displayHours= (hours < 10 ? "0" : "") + hours,
displayMinutes= (minutes < 10 ? "0" : "") + minutes ,
displaySec = (seconds < 10 ? "0" : "") + seconds ;
System.out.println(disHour +":"+ displayMinutes+":"+displaySec );
答案 1 :(得分:0)
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() );
答案 2 :(得分:0)
试试这个:
int millis = 9 * 1000;
TimeZone tz = TimeZone.getTimeZone("UTC");
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
df.setTimeZone(tz);
String time = df.format(new Date(millis));
Log.i("Duration in seconds: ", time);