问题描述
客户经常要转换美国太平洋时间和北京时间,搞得我太晕了。。。想写个程序,网上搜了一下,还有夏令时什么的,参见这里:http://wenwen.sogou.com/z/q610399718.htm?sw=%E5%A4%AA%E5%B9%B3%E6%B4%8B%E6%97%B6%E9%97%B4&ch=new.w.search.1&ch=2我找了一段代码(解析美国东部时间与北京时间相互转换的实现代码)如下:http://www.jb51.net/article/37057.htm但这个是解决美国东部时间的,我要的是太平洋时间,就是俗称加州时间。。求教各位大侠,参照上面的太平洋规则,再借鉴上面这个东部时间的代码我看写的挺全的。帮我写一段时间,最好是JS的,我想用在网页程序上。100分悄悄送上,不够再加。谢谢。
解决方案
解决方案二:
没这么复杂,使用.net提供的TimeZoneInfo类就可以,这个使用的是windows提供的时区信息。比如通用的方式:varchinaZone=TimeZoneInfo.FindSystemTimeZoneById("ChinaStandardTime");varpstZone=TimeZoneInfo.FindSystemTimeZoneById("PacificStandardTime");vartime=newDateTime(DateTime.Now.Ticks,DateTimeKind.Unspecified);varpstTime=TimeZoneInfo.ConvertTime(time,chinaZone,pstZone);
这是把当前时间作为北京时间转换到太平洋时间。当然如果可以确定服务器的时区不变,那么一边用TimeZoneInfo.Local也行。
解决方案三:
所有时间都是一样的,根本用不着什么转换,只不过表现形式不同而已。你应该搞懂DateTime对象的UTC时间表现。对于时间对象x,它内部都可以UTC时间为标准,然后你想让它用什么时区去表现,它就会变成那个时区的时间。你因为不知道UTC时间的标准,所以会有“捧着.net这个金饭碗去要饭”的错觉。不管你用你的本地时间如何录入,你试试在程序中取这个变量的utc时间试试看?!它会自动转换的。vardate0=newDateTime(2015,2,1,18,20,23,DateTimeKind.Local);vardate1=newDateTime(2015,2,1,18,20,23,DateTimeKind.Utc);vartext0=date0.ToLocalTime().ToString();vartext1=date1.ToLocalTime().ToString();
假设你使用早先的SQLServer之类的数据存储服务,假设它的“时间类型”并没有区分UTC还是各地Local标准时间,那么你可以把从不同终端发来的时间,一律以此时间的“UTC时间”来保存。将来要在不同的终端(例如不同语言的网页)上显示时,自动将从SQLServer读取出来的时间作为UTC时间,然后以当地时间(ToLocalTime)来显示。
解决方案四:
比如说你的某一个客户端使用“北京时间”,另一个客户端使用“美东时间”,它们向同一个服务器程序传送json数据,其中有着时间属性,会出什么问题吗?不应该会出什么问题。因为你的json序列化类库应该是合格的,应该将时间格式准确表示(不管以什么格式表示。通常会使用ISO标准格式)。然后服务器端的.net程序,在反序列化为.net对象时,假设服务器windows系统使用曼谷时间,那么你就能看到local类型为曼谷时间的这个时间。但是这整个自动转换过程中,utc时间标准都是不变的。所以假设你使用比较“老的”数据库系统,在表示时间上没有.net系统这种“双重标准”的本领,那么你就注意一下你的程序对数据库读写时都用utc时间,这就不会出现问题了。
解决方案五:
我再给你举个从字符串传来时间的例子vardate0=DateTime.Parse("2014-1-05T08:15:30-08:00");vardate1=DateTime.Parse("2014-1-05T10:15:30-08:00");vartext0=date0.ToLocalTime().ToString();vartext1=date1.ToLocalTime().ToString();
你可以看到,除了所在的时区,其它都一样。然后用本地时间格式来看,直接就看出差2个小时来了!
解决方案六:
引用4楼sp1234_maJia的回复:
我再给你举个从字符串传来时间的例子vardate0=DateTime.Parse("2014-1-05T08:15:30-08:00");vardate1=DateTime.Parse("2014-1-05T10:15:30-08:00");vartext0=date0.ToLocalTime().ToString();vartext1=date1.ToLocalTime().ToString();你可以看到,除了所在的时区,其它都一样。然后用本地时间格式来看,直接就看出差2个小时来了!
我X,假P哥?
解决方案七:
东部时间和太平洋时间差3小时。夏令时是一样的。且应该用楼上这些回答来处理,而不要自己写程序。因为夏令时之类的是根据相关国家行政命令来的,比如前一段时间俄国似乎有时间相关的新规定导致windows出过一个补丁对应。使用系统方法来处理时间可以根据具体情况自动处理,而不需要你动不动要去改代码
解决方案八:
什么东部时间,太平洋时间,不过是时区不一样而已,处理起来有任何区别??