c 不同时区的时间的转换

c 不同时区的时间的转换我们公司的产品 主要面向欧美地区的客户 所以经常涉及到根据时区切换时间的问题 所以花点时间研究这块问题 前提 数据库时间字段 datetime 入库时最好选择 UTC 时间 方便后期根据不同地区的客户进行时间的转换 话不多说 直接上代码 1 首先 sql server 提供了 GETUTCDATE 这个时间函数 可以获取当前 utc 时间 2 NET 中提供了 TimeZoneInfo 类

大家好,我是讯享网,很高兴认识大家。

我们公司的产品,主要面向欧美地区的客户,所以经常涉及到根据时区切换时间的问题.所以花点时间研究这块问题。
前提:数据库时间字段(datetime),入库时最好选择UTC时间。方便后期根据不同地区的客户进行时间的转换
话不多说,直接上代码。
1.首先,sql server提供了GETUTCDATE 这个时间函数,可以获取当前utc时间。
2. .NET 中提供了TimeZoneInfo类,提供了一些方法用于时区的转换
3. 第三方的NetGet包:TimeZoneConverter
在这里插入图片描述
讯享网

Codes:

using System; using System.Collections.Generic; using System.Text; using TimeZoneConverter; namespace DateTimeConvertDemo { 
    public static class Extension { 
    /// <summary> /// 转化UTC时间为PST时间 /// </summary> /// <param name="dateTime"></param> /// <returns></returns> public static DateTime ConvertToPST(this DateTime dateTime) { 
    TimeZoneInfo.ClearCachedData(); return TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTime, "Pacific Standard Time"); } /// <summary> /// 转化PST时间为GMT(也就是UTC时间) /// </summary> /// <param name="dateTime"></param> /// <returns></returns> public static DateTime PSTConvertToGMT(this DateTime dateTime) { 
    TimeZoneInfo.ClearCachedData(); TimeZoneInfo timeZoneSource = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); TimeZoneInfo timeZoneDestination = TimeZoneInfo.FindSystemTimeZoneById("UTC"); return TimeZoneInfo.ConvertTime(dateTime, timeZoneSource, timeZoneDestination); } /// <summary> /// 转化PST时间为UTC时间 /// </summary> /// <param name="dateTime"></param> /// <returns></returns> public static DateTime PSTConvertToUTC(this DateTime dateTime) { 
    TimeZoneInfo.ClearCachedData(); return TimeZoneInfo.ConvertTimeToUtc(dateTime, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")); } public static DateTime ToTimezone(this DateTime dt, string timezoneName = "America/Los_Angeles", bool isUtc = false) { 
    try { 
    TimeZoneInfo targetTimezone = TZConvert.GetTimeZoneInfo("Pacific Standard Time"); switch (timezoneName) { 
    case "Europe/Paris": targetTimezone = TZConvert.GetTimeZoneInfo("Romance Standard Time");// ("Central Europe Standard Time"); break; case "Europe/London": targetTimezone = TZConvert.GetTimeZoneInfo("GMT Standard Time");// ("W. Europe Standard Time"); break; case "America/Los_Angeles": targetTimezone = TZConvert.GetTimeZoneInfo("Pacific Standard Time"); break; case "Asia/Tokyo": targetTimezone = TZConvert.GetTimeZoneInfo("Tokyo Standard Time"); break; default: targetTimezone = TZConvert.GetTimeZoneInfo(timezoneName); break; } var newtime = isUtc ? TimeZoneInfo.ConvertTimeFromUtc(dt, targetTimezone) : TimeZoneInfo.ConvertTime(dt, targetTimezone); return newtime; } catch (Exception ex) { 
    return DateTime.Now; } } } } 

讯享网

Example:

讯享网using System; namespace DateTimeConvertDemo { 
    class Program { 
    static void Main(string[] args) { 
    TestDateTime(); Console.WriteLine("Hello World!"); } public static void TestDateTime() { 
    var pstDate1= DateTime.Now.ToTimezone(); var pstDate2 = DateTime.Now.ConvertToPST(); DateTime utcTime = DateTime.UtcNow; DateTime pstTime = utcTime.ConvertToPST(); Console.WriteLine("pstDate1:"+pstDate1+ "\tpstDate2:"+ pstDate2+ "\tpstTime:"+ pstTime); } } } 

Result:
在这里插入图片描述
关于TimeZoneConverter更多的demo

小讯
上一篇 2025-03-03 07:25
下一篇 2025-01-13 15:52

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/59203.html