C# DateTime.Now.ToString (美国东部标准时间)

C# DateTime.Now.ToString (EST)

提问人:Remaker Shadow 提问时间:10/5/2023 最后编辑:marc_sRemaker Shadow 更新时间:10/5/2023 访问量:80

问:

我的应用程序连接到数据库,它捕获应用程序中显示的时间。

所有记录都有创建时间,日期/时间应采用美国东部标准时间,因为我们的用户在不同的时区工作。

我的问题:如何在 EST 时区显示而不是使用系统或 UTC 时间?DateTime.Now

当前代码:

private void timer1_Tick(object sender, EventArgs e)
{
    label2date_.Text = DateTime.Now.ToString("MM dd yy HH:mm");
}
C# 日期时间

评论

4赞 Alexei Levenkov 10/5/2023
有很多问题在谈论将时间转换为不同的 TZ,例如 stackoverflow.com/questions/15169679/.........显然,您正在要求其他东西,因为您可能已经看到了所有这些问题。您能否编辑这个问题,以解释为什么先将 DateTime 转换为另一个时区的 DateTime,然后进行格式设置不起作用,以及您希望看到的确切输出(即您希望 TZ 显示的位置,如果有的话)
0赞 Chris Baker 10/5/2023
如果只在前端显示 EST 很重要,只需格式化后端在该时区为您提供的任何内容。基本上,只要使用 DateTimeOffset 类型,DB 中的时区值基本上无关紧要。在前端获取任意 DateTimeOffset 并在那里对任何所需的输出进行格式化是微不足道的。

答:

0赞 JW Yap 10/5/2023 #1

解释

您可以使用内置的 TimeZoneInfo 模块获取当前本地时区信息,并使用 TimeZoneInfo.ConvertTime 从一个时区转换到另一个时区。

法典

private void timer1_Tick(object sender, EventArgs e)
    {
    
        DateTime dtNow = DateTime.Now.ToLocalTime();
        // Define the time zone for your local time
        TimeZoneInfo localtz = TimeZoneInfo.Local;
        // Define the Eastern Standard Time (EST) zone
        TimeZoneInfo esttz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
        // Convert local time to EST
        DateTime dtEST = TimeZoneInfo.ConvertTime(dtNow, localtz, esttz);
    
        Console.WriteLine("Local Time: " + dtNow.ToString("MM dd yy HH:mm"));
        Console.WriteLine("EST Time: " + dtEST.ToString("MM dd yy HH:mm"));
    
        label2date_.Text = dtEST.ToString("MM dd yy HH:mm");
    }

评论

0赞 Remaker Shadow 10/5/2023
太好了,它现在可以工作了。谢谢你,你是最棒的。
0赞 JW Yap 10/5/2023
嗨,@RemakerShadow,如果效果好,请接受我的回答
0赞 tymtam 10/5/2023 #2

如果要在 Web 应用中向用户显示本地时间并能够支持多个时区,最好在后端代码中使用 UTC 时间戳,并使客户端代码 (~javascript) 进行转换。


MS Learn 在 [时区之间的时间转换](https://learn.microsoft.com/en-us/dotnet/standard/datetime/converting-between- time-zones#converting-utc-to-a-designated-time-zone) 一文中有一个用于翻译时间的部分。

例如:

DateTime utcNow = DateTime.UtcNow; // UTC, not local machine time

var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"); // or Eastern etc.
DateTime cstNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, tz);

Console.WriteLine($"Utc: {utcNow}");
Console.WriteLine($"CST: {cstNow}");

生产:

Utc: 5/10/2023 2:49:19 AM
CST: 4/10/2023 9:49:19 PM

同样,请注意,如果用户使用多个时区,这将无法正常工作。