c# - 根据用户时区格式化日期和日期时间,包括 C# (.net) 中的时区偏移

标签 c# datetime timezone utc

我正在开发一个 C# 应用程序,并希望显示日期,以便它们是用户所在时区的本地日期。我们将用户的时区设置存储在数据库中,并且所有日期都以 UTC 格式存储在数据库中,这应该会使这个过程变得简单。诀窍是,我还需要显示为用户本地化的每个日期的时区偏移量。时区偏移量应该是服务器的偏移量,而是用户的偏移量。

String timezone = (String)sessionCookie["time_zone"];
TimeZoneInfo localTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timezone);
DateTime localDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDt, localTimeZone);

如果我尝试这样做:

localDateTime.ToString("dd MMM yy - HH:mm:ss (zzz)");

我总是在 zzz 部分获取服务器的偏移量,而不是我刚刚转换为的偏移量。有没有办法使用此格式字符串,但让它显示用户的偏移量。我知道我可以通过执行以下操作手动获取偏移量:

localTimeZone.GetUtcOffset(localDateTime);

我知道手动格式化仍然非常简单,我只是想知道是否有一种方法可以根据特定时区而不是系统时区来格式化 DateTime 对象,而无需重新发明轮子。主要原因是我有实用程序函数用于将日期从 utc 转换为本地时区,并且该函数完成了获取用户时区的工作,而现在我需要为日期复制该工作以确定 UtcOffset是..我想我可以做的另一件事是让我的函数将 DateTime 和 UtcOffset 作为元组返回,这样我就不必重复工作。.以前从未在 C# 中使用过元组,不确定我们的应用程序是否支持它。如果我可以简单地将 toString 函数本地化到特定时区,那就太好了。

最佳答案

尝试使用DateTimeOffset :

DateTimeOffset utcDto = new DateTimeOffset(utcDt, TimeSpan.Zero);
DateTimeOffset localDateTime = TimeZoneInfo.ConvertTime(utcDto, localTimeZone);
string dateString = localDateTime.ToString("dd MMM yy - HH:mm:ss (zzz)");

关于c# - 根据用户时区格式化日期和日期时间,包括 C# (.net) 中的时区偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3672941/

相关文章:

timezone - 是否有信誉良好的来源提供 UN/LOCODE 到奥尔森时区的映射?

python - 有效转换 pandas 数据框中的时区

c# - 在 VirtualBox 中运行时无法恢复 Firebird 数据库

c# - 你能制作一个 C# 应用程序来自动将帖子添加到 Yammer 吗?

c# - 传值+上传文件

javascript - 如何在 javascript 中将字符串 ' dd/mm/yy hh:MM:ss ' 转换为日期?

mysql - 计算每天的平均列值

java - Jboss Java Date 夏令时

c# - 如何将 HTML 分配给隐藏代码中的字符串?

c# - ConvertTimeFromUtc() 和 ToUniversalTime() 是否处理 DST?