c# - 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
有没有办法做到这一点?
解决方案
该方法DateTime.Parse(String, IFormatProvider)
应该足够聪明,可以查看一年中的时间,并进行相应的转换。
Parse 方法的所有重载都是区域性敏感的,除非要解析的字符串符合 ISO 8601 模式。
更多信息在这里。
推荐阅读
- python - 使用正则表达式,获取值并创建字典
- python - Python ElementTree“未找到元素”异常
- c# - grpc.core 的 Xamarin iOS 本机链接失败
- javascript - 如何为 JSON 对象创建搜索功能?
- excel - 在 Excel 中的所有行的列中添加下拉多选列表
- python - 在python中的上下文管理器之前或之后循环
- python - ZeroMQ 连接器仍然成功发送数据,但未能从 MT4 服务器获得响应
- mysql - Glassfish 5 无法创建 mysql 连接池
- c++ - 一个 CMake 目标可以链接到另一个库目标的 *shared* 版本吗?
- botframework - 如何在 cardFactory bot framework sdk v4 中添加字幕