c#时区转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#时区转换相关的知识,希望对你有一定的参考价值。

以北京时间为例 假如我在数据库中存入某一个特定时间 例如 2011-3-10 13:46 我希望这个时间在美国这个时区显示出来的时候转换成了 2011-3-09 23:47 (这个时间是北京时间 2011-3-10 13:46时候的当地时间).求哪位高手指点

参考技术A 读取数据库时间后,根据用户时区进行转换
//本地时间
DateTime localTime = new DateTime(2011, 03, 10, 17, 32, 00);

//时区:美国
string easternZoneId = "Pacific Standard Time";

TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById(easternZoneId);

this.textBox1.Text = TimeZoneInfo.ConvertTimeToUtc(localTime, easternZone).ToString();

参考资料:http://msdn.microsoft.com/zh-cn/library/bb397769

本回答被提问者采纳

基于时区在 C# 中设置日期时间,例如 +08:00 [重复]

【中文标题】基于时区在 C# 中设置日期时间,例如 +08:00 [重复]【英文标题】:Set Datetime in C# based on Timezone like +08:00 [duplicate] 【发布时间】:2021-09-20 20:42:52 【问题描述】:

我已经像这样创建了当前日期时间。

DateTime now = DateTime.UtcNow;

现在我想将其转换为不同的时区。但我在时区得到值,例如 +05:30、+07:00 等。

那么如何使用这种时区值将这个 now 值转换为特定的时区日期。

谢谢

【问题讨论】:

@YongShun 我试过这样,DateTimeOffset d = new DateTimeOffset(now, new TimeSpan(+5, 0, 0)); -- 但出现错误。 【参考方案1】:

您需要 DateTimeOffset.ToOffset(TimeSpan) 将 Utc 转换为您想要的时区。

DateTime now = DateTime.UtcNow;
DateTimeOffset dtoUtc = new DateTimeOffset(now);
TimeSpan offset = new TimeSpan(+5, 00, 00);  // Specify timezone
var dtToSpecificTimezone = dtoUtc.ToOffset(offset);

Console.WriteLine(dtToSpecificTimezone.ToString());

输出:

2021 年 7 月 11 日下午 3:02:10 +05:00

Sample program

【讨论】:

以上是关于c#时区转换的主要内容,如果未能解决你的问题,请参考以下文章

基于时区在 C# 中设置日期时间,例如 +08:00 [重复]

C#与mongodb DateTime转换时区相差8小时

C# DateTime 将日期字符串格式化为带时区的日期格式

获取一个国家的默认时区(通过 CultureInfo)

如何在sql中将带时区的varchar转换为日期时间

在 vbscript 中处理时区