Java 如何将此日期字符串转换为长字符串?

Java 如何将此日期字符串转换为长字符串?,java,date,time,Java,Date,Time,我在从服务器将具有此日期格式的字符串转换为长字符串时遇到问题 Example Date String - "2016-07-04T00:02:34.457Z" (Note this is a string) 我在下面进行了尝试,但需要在gmt周围进行尝试捕获,当我添加它时,在cmtDt周围使用一个not null-然后我将cmtDt初始化为0,并在底部预先设置它,它始终为0 Calendar c = Calendar.getInstance(); TimeZone tz = c.getTime

我在从服务器将具有此日期格式的字符串转换为长字符串时遇到问题

Example Date String - "2016-07-04T00:02:34.457Z" (Note this is a string)
我在下面进行了尝试,但需要在
gmt
周围进行尝试捕获,当我添加它时,在
cmtDt
周围使用一个not null-然后我将
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();

SimpleDataFormat的格式字符串需要为:

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);

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首先,您的输入字符串包括毫秒(而您的格式不包括毫秒)。其次,您的输入
字符串
包含一个文本
Z
(这可能表示UTC时区)。最后,获取系统时区并将其分配给
格式化程序
并不能可靠地成为
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

时区似乎不起作用,试图让它在当地产生影响,它正在显示未来的日期。。。我加错了吗?我试过这个代码,现在得到了0,@Jason上面的代码不适用于时区aspect@Lion789请注意,我的代码(如果您复制并粘贴了tsk tsk)使try块成为
cmtDt
本地块(因此它会对您拥有的任何其他
cmtDt
产生阴影)。最后,尝试调试器。本地?我在它之外设置了cmtDt,如果那不起作用的话?我的代码有
long cmtDt=gmt.getTime()
,这是另一个名为
cmtDt
的变量。将您的帖子编辑成。不过,谢谢您,我已经将您的时区方法与@jason提供的格式组合在一起,现在就可以使用了!