不同日期的相同毫秒值

时间:2016-02-17 12:34:13

标签: android calendar milliseconds

我通过转换日期值(以毫秒为单位)将我的值存储在数据库中,因此通过使用desc查询顺序获取最新日期。订单将按要求生效,但如果我输入日期02/01/2016和2016年1月30日两者都存储相同的毫秒值。

String date = "02/01/2016";
                        String month = date.substring(0, 2);
                        String day = date.substring(3, 5);
                        String year = date.substring(6, 10);
                        Calendar c1 = Calendar.getInstance();
                        c1.set(Integer.parseInt(year), Integer.parseInt(month), Integer.parseInt(day));
                        long left = c1.getTimeInMillis();

调试后,我得到了以下毫秒值 2016年2月1日---- 61414914600000  和2016年1月30日---- 61414914600000

有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

使用SimpleDateFormat值我得到不同的毫秒值:

 Date date;
        String dtStart = "02/01/2016";
        SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
        try {
            date = format.parse(dtStart);
            long timeMills=date.getTime();
            System.out.println("Date ->" + date);
        } catch (Exception e) {
            e.printStackTrace();
        } 

答案 1 :(得分:0)

我运行了您的初始代码,它几乎按预期运行。几点:

  • 你提到毫秒61414914600000.这是不正确的,因为它是未来1900年: http://currentmillis.com/?61414914600000
  • 我很确定你从Date对象获得了这个号码,而不是来自Calendarhttp://docs.oracle.com/javase/6/docs/api/java/util/Date.html#Date(int, int, int)
  • 正如Mat所说,Calendar的月份为零,而你调用setter的行应减去1:

    c1.set(Integer.parseInt(year), Integer.parseInt(month) - 1, Integer.parseInt(day));

  • 您使用另一段代码回答了自己的问题,但不推荐使用Date,而应使用Calendar。您在初始帖子中的原始代码基本上是正确的(除了从零开始的月份)。您应确保知道输出的来源和/或在运行之前不忘记构建代码。