Java时间格式化

时间:2014-10-16 22:55:12

标签: java datetime

我有方法

public static void testDateFormat() throws ParseException {
    DateFormat dateFormat=new SimpleDateFormat("HH:mm:ss");
    Date hora;
    hora=dateFormat.parse("00:00:01");
    System.out.println(hora.getHours()+" "+hora.getMinutes());
    System.out.println("Date "+hora);
    System.out.println("Seconds "+TimeUnit.MILLISECONDS.toSeconds(hora.getTime()));
}

输出

0 0
Date Thu Jan 01 00:00:01 COT 1970
Seconds 18001

为什么秒数是18001?我希望得到1秒。

2 个答案:

答案 0 :(得分:5)

因为您的Date的{​​{1}}不是UTC。事实上,它是COT - 这是UTC-5。 5 * 60 * 60是18000(或你的结果,再加上一秒)。要获得您期望的价值,您可以致电DateFormat#setTimeZone(TimeZone),例如

TimeZone

输出正如您所料。

修改 正如评论中所述,每个Javadoc都有Date#getTime()

  

返回自此DateFormat dateFormat=new SimpleDateFormat("HH:mm:ss"); dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); // <-- Add this. Date hora=dateFormat.parse("00:00:01"); System.out.println(hora.getHours()+" "+hora.getMinutes()); System.out.println("Date "+hora); System.out.println("Seconds "+TimeUnit.MILLISECONDS.toSeconds(hora.getTime())); 对象表示的1970年1月1日00:00:00 GMT以来的毫秒数。

你的Date

Date

相当于

Thu Jan 01 00:00:01 COT 1970

因此你得到5小时的差异。

答案 1 :(得分:0)

answer by Elliott Frisch是正确的。

时间只有

但是如果你正在使用没有日期或时区的时间,那么使用一个可以显式处理它而不是黑客攻击java.util.Date类的日期时间库。

LocalTime

使用Java中的Joda-Time库或java.time包。两者都提供LocalTime类。

LocalTime localTime = LocalTime.parse( "00:00:01" );
int minuteOfHour = localTime.getMinuteOfHour();