c#如何解析时区字符串
常见时区缩写可参考:
http://time.123cha.com/knowledge/6.html
常见时区缩写如下:
IDLE +12:00 国际日期变更线,东边
NZDT +13:00 新西兰夏时制
NZST +12:00 新西兰标准时间
NZT +12:00 新西兰时间
AESST +11:00 澳大利亚东部标准夏时制
ACSST +10:30 中澳大利亚标准夏时制
CADT +10:30 中澳大利亚夏时制
SADT +10:30 南澳大利亚夏时制
AEST +10:00 澳大利亚东部标准时间
EAST +10:00 东澳大利亚标准时间
GST +10:00 关岛标准时间,俄罗斯时区 9
LIGT +10:00 澳大利亚墨尔本
SAST +09:30 南澳大利亚标准时间
CAST +09:30 中澳大利亚标准时间
AWSST +09:00 澳大利亚西部标准夏时制
JST +09:00 日本标准时间,(俄罗斯时区 8)
KST +09:00 韩国标准时间
WDT +09:00 西澳大利亚夏时制
SST +02:00 瑞典夏时制
BST +01:00 英国夏时制
CET +01:00 中欧时间
FST +01:00 法国夏时制
MET +01:00 中欧时间
MEWT +01:00 中欧冬时制
NDT -02:30 纽芬兰(Newfoundland)白昼时间
ADT -03:00 大西洋白昼时间
AWT -03:00 (未知)
BRT -03:00 Brasilia 时间
NFT -03:30 纽芬兰(Newfoundland)标准时间
NST -03:30 纽芬兰(Newfoundland)标准时间
AST -04:00 大西洋标准时间(加拿大)
ACST -04:00 Atlantic/Porto Acre 夏令时
ACT -05:00 Atlantic/Porto Acre 标准时间
EDT -04:00 东部白昼时间
CDT -05:00 中部白昼时间
EST -05:00 东部标准时间
CST -06:00 中部标准时间
MDT -06:00 山区白昼时间
MST -07:00 山区标准时间
PDT -07:00 太平洋白昼时间
AKDT -08:00 阿拉斯加白昼时间
PST -08:00 太平洋标准时间
YDT -08:00 Yukon 白昼时间
AKST -09:00 阿拉斯加标准时间
HDT -09:00 夏威仪/阿拉斯加白昼时间
YST -09:00 Yukon 标准时
MART -09:30 马克萨司群岛时间
AHST -10:00 夏威夷-阿拉斯加标准时间
HST -10:00 夏威夷标准时间
CAT -10:00 中阿拉斯加时间
NT -11:00 州时间(Nome Time)
IDLW -12:00 国际日期变更线,西边
那如何解析如 "IDLW -12:00" 这样的字符串呢,其实很简单,把代码贴在下面以做积累:
1 /// <summary> 2 /// 从字符串转化timezone 3 /// </summary> 4 /// <param name="timezone">如: PST -08:00</param> 5 /// <returns></returns> 6 static bool TryParseTimezone(string timezone,out TimeSpan timeSpan) 7 { 8 if (string.IsNullOrEmpty(timezone)) 9 { 10 Debug.Log("<color=red>timezone is empty</color>"); 11 timeSpan = new TimeSpan(); 12 return false; 13 } 14 15 string[] words = timezone.Split(new char[] { ' ', ':' }, StringSplitOptions.RemoveEmptyEntries); 16 if (words.Length != 3) 17 { 18 Debug.Log("<color=red>timezone is not in right format like [KST +09:00], timezone: " + timezone + "</color>"); 19 timeSpan = new TimeSpan(); 20 return false; 21 } 22 23 int hour; 24 if (!int.TryParse(words[1].TrimStart('+', '-'), out hour)) 25 { 26 Debug.Log("<color=red>timezone is not in right format like [KST +09:00], timezone: " + timezone + "</color>"); 27 timeSpan = new TimeSpan(); 28 return false; 29 } 30 31 int minute; 32 if (!int.TryParse(words[2], out minute)) 33 { 34 Debug.Log("<color=red>timezone is not in right format like [KST +09:00], timezone: " + timezone + "</color>"); 35 timeSpan = new TimeSpan(); 36 return false; 37 } 38 39 bool negative = words[1].StartsWith("-"); 40 hour = negative ? -hour : hour; 41 minute = negative ? -minute : minute; 42 timeSpan = new TimeSpan(hour, minute, 0); 43 return true; 44 }