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

如何使用java将Gmail中任何时区的日期和时间转换为UTC格式,java,gmail,jakarta-mail,Java,Gmail,Jakarta Mail,我想使用java将时区(如PST或PDT)中邮件标题中可用的日期转换为UTC格式 例如: 周二,2015年4月21日07:12:18-0700(PDT)。这是字符串变量中的日期。我想将此日期转换为UTC格式。此日期不是当前系统日期。请建议我用java解决这个问题 对于这种转换,您需要一个考虑夏令时等因素的好的时间库。java的一个好的时间库是。 该库允许输入和输出的各种格式选项来解决您的问题。查看示例文档。假设您正在使用or方法,您将得到一个已正确转换的对象。您只需按照自己的意愿格式化和显示日期

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

例如:


周二,2015年4月21日07:12:18-0700(PDT)。这是字符串变量中的日期。我想将此日期转换为UTC格式。此日期不是当前系统日期。请建议我用java解决这个问题

对于这种转换,您需要一个考虑夏令时等因素的好的时间库。java的一个好的时间库是。 该库允许输入和输出的各种格式选项来解决您的问题。查看示例文档。

假设您正在使用or方法,您将得到一个已正确转换的对象。您只需按照自己的意愿格式化和显示日期,例如使用。

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

请注意,此类格式已过时。它们很难用机器解析。他们假定英语和特定的文化规范。现代协议采用的是格式。默认情况下,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 );
解析为
ZoneDateTime

ZonedDateTime zdt = ZonedDateTime.parse( input , f );
zdt.toString():2015-04-21T07:12:18-07:00[美国/洛杉矶]


请注意,
PDT
不是一个实时时区名称。切勿使用这些2-4个字母的伪区域。以
大陆/地区
格式命名,如
美国/洛杉矶

请展示你目前所拥有的。。还考虑阅读和回答……可能的复制FYI:项目现在在其创建者中,已经开始引导定义构建到java 8 +中的类。我想我会认为偏移比三个字母时区缩写更可靠,因此解析成<代码> OffStaseDeTime</代码>,而不是<代码> ZONDATEDATIMECT/<代码>。有利有弊。