我在将具有此日期格式的字符串从服务器转换为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();
答案 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