负时间戳Java

时间:2016-09-15 09:56:22

标签: java android

我在Java / Android中有时间戳的wierdo问题

    Date inputDate = null;
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm dd/MM/yyyy");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    Log.e("DateH:D", hour+" "+day);
    try {
        inputDate = sdf.parse(hour + " " + day);
        Date currentDate = new Date();
        Log.e("InputDate", inputDate.toString());
        Log.e("InputDate",inputDate.getTime()+"");
        Log.e("CurrentDate", currentDate.toString());
        Log.e("CurrentDate",currentDate.getTime()+"");
        if (!inputDate.after(currentDate) ){
            //TODO change this string
            hourField.setError("Date from past");
            return false;
        }
    } catch (ParseException e) {
        Log.e("DateParser" , e.getLocalizedMessage);
        return false;
    }

此示例输出为:

DateH:D: 12:33 15/09/16
E/InputDate: Tue Sep 15 14:33:00 CET 16
E/InputDate: -61640134020000
E/InputDate: Tue Sep 15 14:33:00 CET 16
E/CurrentDate: Thu Sep 15 11:38:43 CEST 2016
E/CurrentDate: 1473932323198

因此,日期的非时间戳表示是正确的,但时间戳是错误的。怎么可能?我做错了什么?

3 个答案:

答案 0 :(得分:2)

使用yy解析2位数年份。

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm dd/MM/yy");

答案 1 :(得分:1)

Date的{​​{3}}方法:

  

返回自1970年1月1日00:00:00 GMT以来的毫秒数   由此Date对象表示。

由于您指定的年份是 16年,否定结果是有意义的。

答案 2 :(得分:1)

epoch milis的开始日期是星期四,1970年1月1日00:00:00 GMT。之前的任何日期时间都是在epoch milis中为负。