提问人:Remaker Shadow 提问时间:10/5/2023 最后编辑:marc_sRemaker Shadow 更新时间:10/5/2023 访问量:80
C# DateTime.Now.ToString (美国东部标准时间)
C# DateTime.Now.ToString (EST)
问:
我的应用程序连接到数据库,它捕获应用程序中显示的时间。
所有记录都有创建时间,日期/时间应采用美国东部标准时间,因为我们的用户在不同的时区工作。
我的问题:如何在 EST 时区显示而不是使用系统或 UTC 时间?DateTime.Now
当前代码:
private void timer1_Tick(object sender, EventArgs e)
{
label2date_.Text = DateTime.Now.ToString("MM dd yy HH:mm");
}
答:
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
同样,请注意,如果用户使用多个时区,这将无法正常工作。
评论