首页 > 解决方案 > Azure 函数中的时区和夏令时

问题描述

我正在编写一个 Azure Function i .NET Core 3.1,它将解析包含字符串的日志并从字符串的子集创建一个 DateTime 对象。带有日期和时间的字符串在表单上yymmddhhmmss,​​表示事件的时间戳。暗示日期和时间以 CET 或 CEST 给出。输入是我无法更改的旧格式,因此我们使用该函数将其转换为更灵活的格式以进行进一步处理。

我面临的挑战是读取此字符串并将其转换为 UTC。如果不是夏令时,那将没有问题。输入以 CET 或 CEST 给出,即 UTC+1 或 UTC+2。因此,根据一年中的时间,我必须读取字符串并创建一个 DateTime 对象,使用 CET 或 CEST 作为本地时区,然后将其转换为 UTC。

在 Azure Functions 中,我可以设置配置以使函数使用特定时区运行。但是,根据是冬季还是夏季,我在创建 DateTime 对象时必须使用不同的时区,并且必须在运行时执行此操作。

例子:

字符串 191027010203 应使用 CEST 作为本地时间进行解析并转换为 UTC。2019-10-27 01:02:03 CEST -> 2019-10-27 23:02:03 UTC

字符串 191027030203 应使用 CET 作为本地时间进行解析并转换为 UTC。2019-10-27 03:02:03 CET -> 2019-10-27 02:02:03 UTC

字符串 190331015050 应使用 CET 作为本地时间进行解析并转换为 UTC。2019-03-31 01:50:50 CET -> 2019-03-31 00:59:59 UTC

字符串 190331030101 应使用 CEST 作为本地时间进行解析并转换为 UTC。2019-03-31 03:01:01 CEST -> 2019-03-31 01:01:01 UTC

有没有办法做到这一点?

标签: c#.net-coreazure-functions

解决方案


该方法DateTime.Parse(String, IFormatProvider)应该足够聪明,可以查看一年中的时间,并进行相应的转换。

Parse 方法的所有重载都是区域性敏感的,除非要解析的字符串符合 ISO 8601 模式。

更多信息在这里

额外参考:DateTime.IsDaylightSavingTime 方法


推荐阅读