如何将此Date字符串转换为long?

时间:2016-08-11 03:29:18

标签: java date time

我在将具有此日期格式的字符串从服务器转换为long?

时遇到问题
Example Date String - "2016-07-04T00:02:34.457Z" (Note this is a string)

我在下面尝试过此操作,但需要尝试捕捉gmt,当我添加它并且cmtDt周围不为空时 - 然后我将cmtDt初始化为0预先将其设置在底部并且它总是0。

Calendar c = Calendar.getInstance();
TimeZone tz = c.getTimeZone();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ");
formatter.setTimeZone(tz);
Date gmt = formatter.parse(comment.getDateCommented());
cmtDt = gmt.getTime();

3 个答案:

答案 0 :(得分:3)

首先,您的输入String包含毫秒(而您的格式没有)。其次,您的输入String包含文字Z(可能是指示UTC时区)。最后,获取系统时区并将其分配给formatter并不是可靠的UTC。你需要像

这样的东西
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
    Date gmt = formatter.parse("2016-07-04T00:02:34.457Z");
    long cmtDt = gmt.getTime();
    System.out.println(cmtDt);
} catch (Exception e) {
    e.printStackTrace();
}

我跑了,得到了

1467590554457

答案 1 :(得分:1)

SimpleDateFormat的格式字符串必须为:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS");

我的测试代码是:

Calendar c = Calendar.getInstance();
TimeZone tz = c.getTimeZone();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS");
formatter.setTimeZone(tz);
Date gmt = formatter.parse("2016-07-04T00:02:34.457Z");
long cmtDt = gmt.getTime();
System.out.println("cmtDt = " + cmtDt);

答案 2 :(得分:0)

SDF中的格式需要修复。以下内容对您有所帮助。

    Calendar c = Calendar.getInstance();
    TimeZone tz = c.getTimeZone();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
    formatter.setTimeZone(tz);
    Date gmt = formatter.parse("2016-07-04T00:02:34.457Z");
    long cmtDt = gmt.getTime();
    System.out.println(cmtDt);

版画:1467599640457