关于时区(TimeZone)的C#方法一瞥

由于工作需要我们有时常常需要转化当地时间为其它时区的时间,或是把某一个时区的时间,转成另一个时区。

最近由于用了一些C#的方法,下面小结一下,省得过后自已又忘了。

1。 用如下的方法,可以得到所有的时区信息。

TimeZoneInfo.GetSystemTimeZones()


2。得到时区ID

TimeZoneInfo.GetSystemTimeZones()[75].ID

输出:"China Standard Time"

可以得到时区ID,有些方法中需要用到这个值。


3 得到当前系统的TimeZone

 TimeZoneInfo.Local;
如下是输出:(如下输出是北京时间)
{(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi}
    BaseUtcOffset: {08:00:00}
    DaylightName: "China Daylight Time"
    DisplayName: "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi"
    Id: "China Standard Time"
    StandardName: "China Standard Time"
    SupportsDaylightSavingTime: false

4。 如下是写的一些对于DateTime的扩展方法如下:

下面对于UTC 和GMT说明一下

UTC:coordinated universal time 标准世界时间 (也相当于是格林威治标准时间(GMT)Greenwichmeantime)

PST:(=PacificStandardTime)太平洋标准时间 

/// 
        /// 转化UTC时间为PST时间
        /// 
        /// 
        /// 
        public static DateTime ConvertToPST(this DateTime dateTime)
        {            
            return System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTime, "Pacific Standard Time");

        }

        /// 
        /// 转化PST时间为GMT(也就是UTC时间)
        /// 
        /// 
        /// 
        public static DateTime PSTConvertToGMT(this DateTime dateTime)
        {
            TimeZoneInfo timeZoneSource = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
            TimeZoneInfo timeZoneDestination = TimeZoneInfo.FindSystemTimeZoneById("UTC");
            return TimeZoneInfo.ConvertTime(dateTime, timeZoneSource, timeZoneDestination);

            
        }

        /// 
        /// 转化PST时间为UTC时间
        /// 
        /// 
        /// 
        public static DateTime PSTConvertToUTC(this DateTime dateTime)
        {
            return TimeZoneInfo.ConvertTimeToUtc(dateTime, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
        }

对于 PSTConvertToGMT 方法由于使用了
TimeZoneInfo.ConvertTime(dateTime, timeZoneSource, timeZoneDestination);

所以你可以根据需要改成你想要互转的其它两个时区。


另:有时希望我们给一下时间变量赋的值,他的时区信息是UTC,则可用下面的语句来设:

DateTime time = DateTime.SpecifyKind(DateTime.Parse("2013/03/1"), DateTimeKind.Utc);


你可能感兴趣的:(C#,XML,序列化)