如何使用Java将Gmail中任何时区的日期和时间转换为UTC格式

问题描述 投票:1回答:3

我想使用Java将时区(如PST或PDT)的邮件头中可用的日期转换为UTC格式。

例如:

Tue,21 Apr 2015 07:12:18 -0700(PDT)。这是将在字符串变量中的日期。我想将此日期转换为UTC格式。此日期不是当前系统日期。请向我建议使用Java解决该问题的方法。

java gmail javamail
3个回答
1
投票

假设您正在使用MimeMessage getSentDategetReceivedDate方法,您将获得一个已经正确转换的Date对象。您只需要格式化并显示所需的日期,例如,使用SimpleDateFormat


0
投票

对于该转换,您将需要一个良好的时间库,其中要考虑夏时制等。对于Java,一个很棒的库是Joda。该库允许输入和输出使用多种格式选项来解决您的问题。请参阅文档中的样本。


0
投票

过时的格式

您的示例数据很奇怪。我记得旧的电子邮件标准使用RFC 1123RFC 822。您的格式类似,但是在偏移的小时和分钟之间缺少冒号,并且在伪区域周围有多余的括号。

请注意,此类格式已过时。它们很难用机器解析。他们假设英语和特定的文化规范。现代协议改为采用ISO 8601格式。默认情况下,java.time类中使用ISO 8601格式。

java.time

如果您确实必须解析该特定格式的文本,请定义一个DateTimeFormatter以匹配其格式设置。

String input = "Tue, 21 Apr 2015 07:12:18 -0700 (PDT)";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE, dd MMM uuuu HH:mm:ss XXXX '('z')'" ).withLocale( Locale.US );

解析为ZonedDateTime

ZonedDateTime zdt = ZonedDateTime.parse( input , f );

zdt.toString():2015-04-21T07:12:18-07:00 [America / Los_Angeles]

请注意,PDT不是实时区域名称。切勿使用这些2-4个字母的伪区域。 Real time zones具有Continent/Region格式的名称,例如America/Los_Angeles

© www.soinside.com 2019 - 2024. All rights reserved.