EWS JAVA API 2.0 转发时区不正确的电子邮件

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

我正在用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);
java exchange-server ewsjavaapi
1个回答
0
投票

您需要使用 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);
© www.soinside.com 2019 - 2024. All rights reserved.