最近在项目中Fix了一个跨时区的bug,为了Fix这个bug真是费了九牛二虎之力呀。就现在看来主要原因还是平时的开发任务没有涉及到这方面的概念,并且测试跨时区功能的Test Case也比较的难写。为了以后能顺利的解决跨时区功能的问题,制作了张跨时区表,总共102个时区:
UTC时区表Dateline Standard Time|UTC-12:00UTC-11|UTC-11:00Hawaiian Standard Time|UTC-10:00Alaskan Standard Time|UTC-09:00Pacific Standard Time (Mexico)|UTC-08:00Pacific Standard Time|UTC-08:00US Mountain Standard Time|UTC-07:00Mountain Standard Time (Mexico)|UTC-07:00Mountain Standard Time|UTC-07:00Central America Standard Time|UTC-06:00Central Standard Time|UTC-06:00Central Standard Time (Mexico)|UTC-06:00Canada Central Standard Time|UTC-06:00SA Pacific Standard Time|UTC-05:00Eastern Standard Time|UTC-05:00US Eastern Standard Time|UTC-05:00Venezuela Standard Time|UTC-04:30Paraguay Standard Time|UTC-04:00Atlantic Standard Time|UTC-04:00Central Brazilian Standard Time|UTC-04:00SA Western Standard Time|UTC-04:00Pacific SA Standard Time|UTC-04:00Newfoundland Standard Time|UTC-03:30E. South America Standard Time|UTC-03:00Argentina Standard Time|UTC-03:00SA Eastern Standard Time|UTC-03:00Greenland Standard Time|UTC-03:00Montevideo Standard Time|UTC-03:00Bahia Standard Time|UTC-03:00UTC-02|UTC-02:00Mid-Atlantic Standard Time|UTC-02:00Azores Standard Time|UTC-01:00Cape Verde Standard Time|UTC-01:00Morocco Standard Time|UTCCoordinated Universal Time|UTCGMT Standard Time|UTCGreenwich Standard Time|UTCW. Europe Standard Time|UTC+01:00</td>Central Europe Standard Time|UTC+01:00Romance Standard Time|UTC+01:00Central European Standard Time|UTC+01:00Libya Standard Time|UTC+01:00W. Central Africa Standard Time|UTC+01:00Namibia Standard Time|UTC+01:00GTB Standard Time|UTC+02:00Middle East Standard Time|UTC+02:00Egypt Standard Time|UTC+02:00Syria Standard Time|UTC+02:00E. Europe Standard Time|UTC+02:00South Africa Standard Time|UTC+02:00FLE Standard Time|UTC+02:00Turkey Standard Time|UTC+02:00Jerusalem Standard Time|UTC+02:00Jordan Standard Time|UTC+03:00Arabic Standard Time|UTC+03:00Kaliningrad Standard Time|UTC+03:00Arab Standard Time|UTC+03:00E. Africa Standard Time|UTC+03:00Iran Standard Time|UTC+03:30</td>Arabian Standard Time|UTC+04:00Azerbaijan Standard Time|UTC+04:00Russian Standard Time|UTC+04:00Mauritius Standard Time|UTC+04:00Georgian Standard Time|UTC+04:00Caucasus Standard Time|UTC+04:00Afghanistan Standard Time|UTC+04:30Pakistan Standard Time|UTC+05:00West Asia Standard Time|UTC+05:00India Standard Time|UTC+05:30Sri Lanka Standard Time|UTC+05:30Nepal Standard Time|UTC+05:45</td>Central Asia Standard Time|UTC+06:00Bangladesh Standard Time|UTC+06:00Ekaterinburg Standard Time|UTC+06:00Myanmar Standard Time|UTC+06:30SE Asia Standard Time|UTC+07:00N. Central Asia Standard Time|UTC+07:00China Standard Time|UTC+08:00North Asia Standard Time|UTC+08:00Malay Peninsula Standard Time|UTC+08:00W. Australia Standard Time|UTC+08:00Taipei Standard Time|UTC+08:00Ulaanbaatar Standard Time|UTC+08:00North Asia East Standard Time|UTC+09:00Tokyo Standard Time|UTC+09:00Korea Standard Time|UTC+09:00Cen. Australia Standard Time|UTC+09:30AUS Central Standard Time|UTC+09:30E. Australia Standard Time|UTC+10:00AUS Eastern Standard Time|UTC+10:00West Pacific Standard Time|UTC+10:00Tasmania Standard Time|UTC+10:00Yakutsk Standard Time|UTC+10:00Central Pacific Standard Time|UTC+11:00Vladivostok Standard Time|UTC+11:00New Zealand Standard Time|UTC+12:00UTC+12|UTC+12:00Fiji Standard Time|UTC+12:00Magadan Standard Time|UTC+12:00
时区表的用法假如我想模拟2个时区来写测试case,那么我们可以这样做:
TimeZoneInfo UTC_8 = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");//-8 TimeZoneInfo UTC_4 = TimeZoneInfo.Local; DateTime dt_4 = new DateTime(2013, 5, 8, 7, 0, 0); //-4 DateTime dt_8 = TimeZoneInfo.ConvertTime(dt_4, UTC_8);
备注
在这张时区表中,用符号'|'对时区的标准名称和时区对应UTC时间的偏移量值进行了分割,这样做是为了方便检索。在实际使用过程中,我们仅仅需要时区的标准名称(可以参考本文的小例子)。
如果在Windows XP中的文件夹中增加墙纸,打开该文件夹,选择“工具”*“文件夹选项”,点击“查看”选项卡。在“高级设置”项目中,选择“显示所有文件和文件夹”选项;去掉“隐藏受保护的操作系统文件”选项(推荐),在警告提示出现后点击“确认”按钮;点击“是”按钮,然后双击名为“desktop.ini”的文件,打开文本编辑器,如果您找不到desktop.ini文件,在记事本或其他文本编辑器建立此文件。 在文本编辑器的第一行中输入[{BE098140-A513-11D0-A3A4-00C04FD706EC}](注意: 本行中不包括大写的O字母,用到的全部是数字“0”),然后敲击“Enter”键。输入“IconArea_Image=”以及.bmp、.gif或. jpg图片文件路径。例如,输入“IconArea_Image=C:\My Documents\My Pictures\Blue Hills.bmp.”,然后敲击“Enter”键。 如果要改变文件夹中图标标识文字的颜色,则需要更多的技巧。如果需要按钮标识文字为黑色,什么都不用做; 如果要设定为白色,输入“IconArea_Text=0x00FFFFFF”(请确认x为小写字母),然后敲击“Enter”键; 设定为红色,把上面命令“=”号之后的数字字母替换为“0x000000FF”; 设定为黄色,替换为“0x0000FFFF”; 设定为蓝色,替换为“0x00FF0000”; 设定为灰色,替换为“0x00808080”。这些代码代表着24位颜色配置表中不同的值,将红蓝绿色综合后得出: 0x00bbggrr(这个值从十进制的0或者十六进制00,到十进制的255或者十六进制的FF作为色深范围)。如果是新建文件,将 “desktop.ini”文件保存在背景图片文件夹中,注意用引号防止记事本保存文件时加上默认的.txt扩展名。 现在为文件夹定义属性,首先,把背景图片添加到相应的文件夹窗口,点击“向上”按钮至上一级目录。选择“开始”*“运行”,输入“attrib +s”,然后连接一个空格,在文本输入框后将需要的文件夹按钮拖拽至此。这样,在“运行”对话框的“打开”文本输入框中即会出现这样一串字符 “attrib +s C:\Documents and Settings\...\My Documents\My Folder”,点击“确认”按钮。当您下次打开该文件夹时,就能够看到新的墙纸了(如图2所示)。如果不希望看到desktop.ini文件,右击该文件,选择“属性”选项。在“常规”选项卡中,选定“隐藏”复选项,然后点击“确认”按钮即可。接下来,选择“工具”*“文件夹选项”*“查看”,取消“显示所有文件和文件夹”复选项即可。在“文件夹选项”对话框打开后,如果之前取消了“隐藏受保护的操作系统文件”选项,请重新选定它。 文件夹名字的颜色可以改 例如: 这里背景和文件名都该了! {BE098140-A513-11D0-A3A4-00C04FD706EC}] IconArea_Image=C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Water lilies.jpg IconArea_Text=0x000000FF 红色的。 黄色为“0x0000FFFF”; 蓝色为“0x00FF0000”; 灰色为“0x00808080 注意文章中的 斜杠 是单斜杠
曾几何时,多次研究过字符编码的问题,每次都是了解到大部分,以至于出现新的编码问题时还不得不去重新寻找资料。在这里我重新完整的整理一遍,简明扼要,分享出来也方便日后查看。
1.常见的字符编码,按照轻到重介绍
1-1.ASCII
最基本的编码,西文字符集的国际标准,有7位(128标准字符)和8位(128标准字符+128扩充字符)两种。
1-2.GB2312
GB开头的都是国标码,也就是中国制定的编码。简体中文字符集,2字节(16位)存储,7000多个简体汉字字符。
1-3.GBK
对GB2312的扩展,完全兼容GB2312,多加了繁体字,2字节(16位)存储,20000多个汉字字符。
1-4.GB18030
对GBK的扩展,良好兼容GBK和GB2312,多加了少数名族文字,变长编码,有1、2、4字节的。
1-5.ISO-8859-1
国际标准化组织制定的,又称Latin-1或西欧语言,当然还有ISO-8859-2(Latin-2或叫中欧语言)。。。。。。单字节(8位),不支持中文。这下知道为什 么eclipse的properties文件默认ISO-8859-1不能保存中文了吧,都要设置成GBK或者UTF-8才行。
1-6.ANSI
这个最诡异了,不同国家和地区编码有不同标准,在英文操作系统下代表ASCII,在简体中文操作系统下代表GB2312,在日文操作系统下代表JIS。。。。。。可 以理解为本地编码,或者严格来说不算是编码,是个代号。存储单元嘛当然是变动的了,理解为指向某种编码的指针也可以。
1-7.UNICODE
这个编码是真正的实现了世界字符的一统。固定长度(4字节,在某个国际标准下,某个国际标准是2字节),世界上每一种字符都对应着一个Unicode编码。弊端也显而易 见,存储单字节的英文浪费空间,效率不高。有时候我们看到一些编辑器转码后产生\ua2b3\u43ab就是转换成Unicode的方式表示,\u是声明16进制的意思,后面跟 上4个16进制的数,如a2b3。做web国际化时候这个没少解除吧。
1-8.UTF-8
简单说,就是为了解决UNICODE的弊端出现了可变长度的UTF-8。
2.各种操作系统默认编码
先声明,部分操作系统是可以更改系统编码的,如Linux。这里列举的是最常规的情况。
Linux------UTF-8(你喜欢装中文版自己面壁去)
P-Windows3.2和苹果OS就是以GB2312为基本汉字编码
Windows 95/98以及以上则以GBK为基本汉字编码,记得cmd下使用mysql必须执行的set names gbk么
3.关于回车换行(\r\n)
这个还是挺让人疑惑的。
\r代表回车,就是把光标移动到行首
\n代表换行,就是光标移动到下一行
也许你钻牛角尖,换行不就行了,为什么还要回车?早起的OS很傻,你要是换行不回车,光标往下移动一行,但是不会置于行首。这个OS