You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6中如何解析澳大利亚悉尼时区的DateTime

解析悉尼时区DateTime字符串并自动适配夏令时

在.NET(包括F#)中,可通过TimeZoneInfo类处理时区与夏令时规则,以下是具体实现方案:

1. 获取悉尼时区实例

悉尼所属的澳大利亚东部时区,对应的系统时区ID为"AUS Eastern Standard Time",通过TimeZoneInfo.FindSystemTimeZoneById可获取包含夏令时切换逻辑的时区实例:

open System
open System.Globalization

let sydneyTimeZone = TimeZoneInfo.FindSystemTimeZoneById "AUS Eastern Standard Time"

2. 按指定格式解析DateTime字符串

你的示例字符串格式为dd/MM/yyyy HH:mm:ss,需用DateTime.ParseExact指定格式解析,避免默认解析的歧义:

let dateString = "20/12/2022 11:26:34"
let format = "dd/MM/yyyy HH:mm:ss"
// 将解析结果标记为「未指定时区」,明确告知系统这是悉尼当地时间
let parsedUnspecified = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture) |> DateTime.SpecifyKind DateTimeKind.Unspecified

3. 自动适配夏令时并转换

TimeZoneInfo内置了悉尼的夏令时规则(每年10月至次年4月启用夏令时),转换时会自动计算正确的UTC偏移:

  • 转换为UTC时间(推荐,UTC无时区歧义):
let utcTime = TimeZoneInfo.ConvertTimeToUtc(parsedUnspecified, sydneyTimeZone)
// 2022年12月处于悉尼夏令时,偏移为+11:00,最终utcTime结果为2022-12-20 00:26:34
  • 保留悉尼当地时区的带偏移信息的时间:
let sydneyDateTimeOffset = DateTimeOffset(parsedUnspecified, sydneyTimeZone.GetUtcOffset(parsedUnspecified))
// 最终结果为2022-12-20 11:26:34 +11:00

关键说明

  • TimeZoneInfo已内置全球各时区的夏令时规则,无需手动判断夏令时区间。
  • 必须将解析后的DateTime标记为Unspecified,避免系统误判为本地时区或UTC时区,确保转换逻辑严格遵循悉尼时区规则。

内容的提问来源于stack exchange,提问作者Martin Thompson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:10:33