gpt4 book ai didi

c# - 使用 DateTime 时区

转载 作者:行者123 更新时间:2023-12-03 22:00:32 24 4
gpt4 key购买 nike

我正在编写一些代码,其中我有一个 UTC 日期时间,我需要将其显示为 LocalTime,其中我有两个时区的 Culture 对象。

这是我的代码:

public void CultureDateTimeLocalTime()
{
DateTime dateTimeUtcNow = DateTime.UtcNow;
DateTime convertedDate = DateTime.SpecifyKind(dateTimeUtcNow, DateTimeKind.Utc);
DateTime dateTimeLocalTime = convertedDate.ToLocalTime();

String format = "MM/dd/yyyy hh:mm:sszzz";

string localTime = dateTimeLocalTime.ToString(format);

CultureInfo cultureNZ = new CultureInfo("en-NZ");
CultureInfo cultureUS = new CultureInfo("en-US");

DateTime DateTimeNZ;
bool parseNZ = DateTime.TryParse(localTime, cultureNZ, DateTimeStyles.None, out DateTimeNZ);
string outputNZ = DateTimeNZ.ToString("F");

DateTime DateTimeUS;
bool parseUS = DateTime.TryParse(localTime, cultureUS, DateTimeStyles.None, out DateTimeUS);
string outputUS = DateTimeUS.ToString("F");
}

public void CultureDateTimeLocalTime2()
{
DateTime dateTimeUtcNow = DateTime.UtcNow;
DateTime convertedDate = DateTime.SpecifyKind(dateTimeUtcNow, DateTimeKind.Utc);
DateTime dateTimeLocalTime = convertedDate.ToLocalTime();

String format = "MM/dd/yyyy hh:mm:sszzz";

string localTime = dateTimeLocalTime.ToString(format);

CultureInfo cultureNZ = new CultureInfo("en-NZ");
CultureInfo cultureUS = new CultureInfo("en-US");

DateTime DateTimeNZ = DateTime.ParseExact(localTime, format, cultureNZ.DateTimeFormat);
string outputNZ = DateTimeNZ.ToString("F");

DateTime DateTimeUS = DateTime.ParseExact(localTime, format, cultureUS.DateTimeFormat);
string outputUS = DateTimeUS.ToString("F");
}

在这两个函数中,outputNZoutputUS 是相同的。这是为什么?

提前致谢。

最佳答案

CultureInfo 包含为特定文化格式化日期、时间和数字的规则。没有关于该文化的时区的规则,因为对于大多数文化和时区而言,没有一对一的对应关系,因此您不能使用 CultureInfo 神奇地将时区考虑在内被格式化为字符串。

你需要的是新西兰TimeZoneInfo :

var nzTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("New Zealand Standard Time");
var utcNow = DateTime.UtcNow;
var nzNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, nzTimeZoneInfo);
var outputNz = nzNow.ToString("F", CultureInfo.GetCultureInfo("en-NZ"));

您可以使用相同的逻辑转换为美国时区,但很明显您无法从 CultureInfo 推断出时区,因为美国有多个时区,您必须决定使用哪个。

此外,在处理日期和时间时,您应该只在最后一步转换为字符串格式。您的代码恰好可以工作,因为您仔细控制了用于往返字符串的格式,但这种往返是不必要的,我已经修复了许多错误,这些错误在这些错误中这种往返代码对区域设置有隐含的假设当代码在另一个环境中执行时,计算机并不总是如此。

关于c# - 使用 DateTime 时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29004294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com