在java中两个不同时间的相同毫秒

时间:2013-11-19 17:58:10

标签: java simpledateformat

我需要将给定字符串的24小时日期格式转换为毫秒。但是我在00:10:00和12:10:00得到相同的毫秒数。这是我的代码示例;请帮助我。

DateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 

formate.parse("2013-10-31 12:10:00").getTime(); //  return 1383158400000

formate.parse("2013-10-31 00:10:00").getTime();  // return 1383158400000

我使用的是24小时格式,但我在2次不同的时间内得到了相同的结果。哪里出错了?请帮我解决问题。

2 个答案:

答案 0 :(得分:9)

您使用的是12小时hh格式;使用24小时HH(大写)格式。

DateFormat formate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
  

H小时(0-23)0号

     

h上午/下午(1-12)12号小时

答案 1 :(得分:0)

java.time

如果没有 AM/PM 标记,日期时间解析器会考虑 24 小时格式的小时,其中符号是 H 而不是 h

更改这将解决您的问题,但旧的日期时间 API(java.util 日期时间类型及其格式 API,SimpleDateFormat)已过时且容易出错。建议完全停止使用它们并切换到 java.timemodern date-time API*

使用现代日期时间 API 的演示:

import java.time.Instant;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String args[]) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("u-M-d H:m:s", Locale.ENGLISH).withZone(ZoneOffset.UTC);
        System.out.println(Instant.from(dtf.parse("2013-10-31 12:10:00")).toEpochMilli());
        System.out.println(Instant.from(dtf.parse("2013-10-31 00:10:00")).toEpochMilli());
    }
}

输出:

1383221400000
1383178200000

modern date-time API 中了解有关 Trail: Date Time* 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project