Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这个日期没有显示在GMT中?_Java_Jodatime_Simpledateformat - Fatal编程技术网

Java 为什么这个日期没有显示在GMT中?

Java 为什么这个日期没有显示在GMT中?,java,jodatime,simpledateformat,Java,Jodatime,Simpledateformat,我可以看到,格林尼治标准时间有一个“Z”常数作为它是格林尼治标准时间的指示器。但是,当我解析GMT字符串时,它仍然在打印本地时间 代码: SimpleDateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); String timeGMT = "2015-05-21T08:42:27.334Z"; try { System.out.println("Time GMT>>>&g

我可以看到,格林尼治标准时间有一个“Z”常数作为它是格林尼治标准时间的指示器。但是,当我解析GMT字符串时,它仍然在打印本地时间

代码:

SimpleDateFormat outFormat = new 
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String timeGMT = "2015-05-21T08:42:27.334Z";
try {
    System.out.println("Time GMT>>>>>>"+outFormat.parse(timeGMT));
} catch (ParseException e) {
    e.printStackTrace();
}
输出:

Thu May 21 08:42:27 IST 2015
Thu May 21 08:42:27 GMT 2015
期望值:

Thu May 21 08:42:27 IST 2015
Thu May 21 08:42:27 GMT 2015

输入中的Z不是文字常量,而是表示UTC+00:00(别名“GMT”)。请删除图案中最后一个图案符号周围的撇号。并使用“X”而不是“Z”作为符号,以便正确地将“Z”解释为偏移UTC+00:00的ISO-8601标记

SimpleDateFormat outFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
这里有两个问题

首先,您使用了错误的格式进行解析。您的格式告诉解析器仅将
Z
视为无意义的文字字符

这意味着它将解析为本地日期,因为它不将
Z
视为时区标记。如果希望将
Z
解释为时区,则格式中应包含
X
,而不是
'Z'

    String timeGMT = "2015-05-21T08:42:27.334Z";

    DateFormat f1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    DateFormat f2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");

    Date d1 = f1.parse(timeGMT);
    Date d2 = f2.parse(timeGMT);

    System.out.println(d1);
    System.out.println(d2);
我目前在GMT+3,这是我从中得到的输出:

Thu May 21 08:42:27 IDT 2015 Thu May 21 11:42:27 IDT 2015 对于上一个示例,这将产生以下结果:

2015-05-21 08:42:27 GMT
2015-05-21 08:42:27 GMT这个重复的问题很好地解释了这一点:同意。但是
Z
常数呢。按格式应视为
GMT
。那么为什么我们需要设置时区。请检查:一行-
“如果您希望Z被解释为时区,您的格式应该有X而不是Z”
+1。