java时间为什么只显示到日_java-为什么此日期未在格林尼治标准时间显示?

我可以看到,格林尼治标准时间是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

解决方法:

这里有两个问题.

首先是您使用错误的格式进行解析.您的格式告诉解析器仅将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

如您所见,d2提前了3个小时,这意味着它按照GMT解释了原始时间.

另一个问题是您以默认格式打印结果日期.默认格式是您当地的时区,因此它将像在我所在的时区一样打印该格式.

要更改此设置,还必须格式化输出:

DateFormat f3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");

f3.setTimeZone(TimeZone.getTimeZone("GMT"));

System.out.println(f3.format(d2));

对于前面的示例,这将产生以下内容:

2015-05-21 08:42:27 GMT

标签:jodatime,simpledateformat,java

来源: https://codeday.me/bug/20191120/2042818.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值