有一种方法可以强制 Outlook 应用在导入 .ics 文件时使用 IANA 格式
Posted
技术标签:
【中文标题】有一种方法可以强制 Outlook 应用在导入 .ics 文件时使用 IANA 格式【英文标题】:There is a way to force outlook app to use IANA format when import .ics file 【发布时间】:2021-12-11 22:27:58 【问题描述】:我目前面临数据格式问题。我的产品提供 ics 文件,允许用户在自己的日历中导入会议日程。 由于我的用户在不同的国家,我们使用时区来管理小时的差异。到目前为止,一切正常,但几天前我们遇到了一位南非用户的问题。由于他的代码在 IANA 和微软时区格式之间不一样,当他在 Outlook 应用程序中导入它时,它会在显示的小时内产生错误。 我对其进行了测试,并且仅在此日历中得到了这种行为。如果我在 office365 或谷歌日历中测试它,我不会复制它。 有人知道如何在 Outlook 应用程序中强制它或通过在 ics 文件中添加一些信息让他显示正确的时间?
为了更清楚地完成我的解释,我把案例放在这里。 我的客户创建会议 = 从 12:00 到 15:00 SAST(意味着 GMT + 02:00)。 当我们将会议导出到 Outlookapps 日历中时,我们得到了会议时间 = 从 10:00 到 13:00 CET。 这是错误的,因为时间应该是欧洲中部时间 11:00 到 14:00。 此外,如果我在 Office 365 日历或谷歌日历中导入相同的会议,我得到了预期的结果(从 CET 11:00 到 14:00)。
关于代码,我们使用基于 IANA 格式的对象 java.time.zoneddatetime 和 java.time.zoneid。但对我来说,问题不在这里。 我已经找到了很多进行转换的方法,但由于我的结果在除此之外的所有情况下都是正确的,因此我正在寻找一种应用配置,而不必提供 2 种不同的导出方式,这会让用户感到困惑。
目前我正在看这个:https://docs.microsoft.com/en-us/graph/api/outlookuser-supportedtimezones?view=graph-rest-1.0&tabs=http
问候,马修
【问题讨论】:
请提供足够的代码,以便其他人更好地理解或重现问题。 Ferlaymat 您需要在问题中非常清楚并举例说明。 “代码”不明确。我猜你的意思是时区标识符? ICS 规范使用 olson 时区数据库,所有应用程序都应该处理它。您的小时差可能是一个不同的问题。请阅读***.com/help/how-to-ask 【参考方案1】:终于找到了!
替换这段代码:
TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
通过这个符合微软标准的:
TimeZoneRegistry registry = new TimeZoneRegistryImpl("zoneinfo-outlook/");
【讨论】:
以上是关于有一种方法可以强制 Outlook 应用在导入 .ics 文件时使用 IANA 格式的主要内容,如果未能解决你的问题,请参考以下文章
Outlook 表单:从 Excel 导入/VLOOKUP 数据?