Java时间格式化

Java时间格式化,java,datetime,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()); Syst

我有办法

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秒。

因为您的
日期
时区不是UTC。事实上,这是UTC-5。5*60*60等于18000(或者你的结果加上一秒钟)。要获得您期望的值,您可以调用

相当于

Thu Jan 01 00:05:01 UTC 1970
这样就得到了5个小时的差值。

这是正确的

只有时间 但是,如果您只处理没有日期或时区的时间,那么使用可以显式处理的日期时间库,而不是攻击java.util.date类

LocalTime
使用java 8中的库或java.time包。两者都提供课程


还有一个重要的细节,您确实应该提到,
Date
getTime()
方法返回自
00:00 1/1/1970 UTC
以来的毫秒数,当然是
19:00:00 31/12/1969 COT
@DavidWallace编辑的。更好?
Thu Jan 01 00:00:01 COT 1970
Thu Jan 01 00:05:01 UTC 1970
LocalTime localTime = LocalTime.parse( "00:00:01" );
int minuteOfHour = localTime.getMinuteOfHour();