我正在用Java编写一个函数来转发Outlook电子邮件。在使用ews-java-api 2.0时,我发现转发的电子邮件所附的原始电子邮件的发送时间的时区是UTC,而不是我所在的UTC+8时区。有什么办法可以解决这个问题吗?谢谢!
这是我的pom.xml:
<dependency>
<groupId>com.microsoft.ews-java-api</groupId>
<artifactId>ews-java-api</artifactId>
<version>2.0</version>
</dependency>
这是我的代码:
EmailMessage message = EmailMessage.bind(exchangeService, new ItemId(this.messageId));
ResponseMessage responseMessage = null;
responseMessage = message.createForward();
MessageBody messageBody = new MessageBody();
messageBody.setBodyType(BodyType.HTML);
messageBody.setText(html);
responseMessage.setSubject(this.subject);
responseMessage.setBodyPrefix(messageBody);
setResponseMessageRecipients(responseMessage);
responseMessage.sendAndSaveCopy();
我在初始化ExchangeService之前尝试将时区设置为UTC+8,并将计算机的时区更改为UTC,但原始电子邮件的发送时间没有改变。
TimeZone tz = TimeZone.getTimeZone("GMT+8");
TimeZone.setDefault(tz);
您需要使用 ZonedDateTime 类并将 utc 时间转换为 gmt+8:
ZoneId baseSystemTimeZone = ZoneId.of("UTC");
ZoneId targetZoneId =ZoneId.of("GMT+8");
ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDateTime.parse("date-time",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), baseSystemTimeZone);
Instant instant = Instant.from(zonedDateTime);
ZonedDateTime zd = instant.atZone(targetZoneId);