首页 > 代码库 > DateTime使用(时区)

DateTime使用(时区)

一、时区的用法

项目背景:商业软件涉及到许可证的问题,用于管理客户对软件的使用。项目组开发了一个生成license的工具,里面包含一系列的规则(如licenseEffectiveStartDate以及licenseExpirationDate)。那么问题来了:假如licenseEffectiveStartDate设定为2014/10/17,软件是给美国客户来使用,那么在软件中要怎样设定才能让美国客户在其当地时间的2014/10/17才能使用软件呢。

二、解决方案

  1. 在license生成工具中添加时区列表,用来设定license是对哪个时区的客户使用的。

    1 //得到时区列表2 ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();3 //得到所选择的时区4   TimeZoneInfo timeZone = timeZones.First(o => o.Id == cmb_TimeZone.SelectedValue.ToString());5 int timeZone = timeZone.BaseUtcOffset.Hours;

     

  2. 从NTP服务器中取出UTC时间,然后加上客户所在的时区,也即是license里面设定的时区,就可以得到客户的当地时间LocalDateTime。
     1  /// <summary> 2         /// get current date time from net work. 3         /// </summary> 4         /// <returns></returns> 5         private DateTime GetLocalDateTime(int timeZone) 6         { 7             DateTime utcDateTime = new DateTime(); 8             try 9             {10                 utcDateTime = NTPHelper.GetUTCDate();11                 return utcDateTime.AddHours(timeZone);12             }13             catch14             {15                 throw new Exception(CMsgDisConncetion);16             }17         }

     

  3. DateTime.Compare(t1,t2)即可判断软件何时可用,何时到期。
     1  /// <summary> 2         /// determine whether current date reach for specific date 3         /// </summary> 4         /// <param name="currentDateTime">current date time</param> 5         /// <param name="specificDateTime">sepcific date time</param> 6         /// <returns></returns> 7         private bool IsReachSpecificDate(DateTime currentDateTime, DateTime specificDateTime) 8         { 9             return DateTime.Compare(currentDateTime, specificDateTime) > 0 ? true : false;10         }

DateTime使用(时区)