转换 美国太平洋时间 和 北京时间

jianyuan00026 2015-02-01 03:54:53
客户经常要转换 美国太平洋时间 和 北京时间,搞得我太晕了。。。

想写个程序,网上搜了一下,还有夏令时什么的,参见这里:
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分悄悄送上,不够再加。谢谢。
...全文
1726 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-02-02
  • 打赏
  • 举报
回复
什么东部时间,太平洋时间,不过是时区不一样而已,处理起来有任何区别??
wjq 2015-02-02
  • 打赏
  • 举报
回复
东部时间和太平洋时间差3小时。夏令时是一样的。 且应该用楼上这些回答来处理,而不要自己写程序。因为夏令时之类的是根据相关国家行政命令来的,比如前一段时间俄国似乎有时间相关的新规定导致windows出过一个补丁对应。使用系统方法来处理时间可以根据具体情况自动处理,而不需要你动不动要去改代码
本拉灯 2015-02-01
  • 打赏
  • 举报
回复
引用 4 楼 sp1234_maJia 的回复:
我再给你举个从字符串传来时间的例子
var date0 = DateTime.Parse("2014-1-05T08:15:30-08:00");
var date1 = DateTime.Parse("2014-1-05T10:15:30-08:00");
var text0 = date0.ToLocalTime().ToString();
var text1 = date1.ToLocalTime().ToString();
你可以看到,除了所在的时区,其它都一样。然后用本地时间格式来看,直接就看出差2个小时来了!
我X,假P哥?
sp1234_maJia 2015-02-01
  • 打赏
  • 举报
回复
我再给你举个从字符串传来时间的例子
var date0 = DateTime.Parse("2014-1-05T08:15:30-08:00");
var date1 = DateTime.Parse("2014-1-05T10:15:30-08:00");
var text0 = date0.ToLocalTime().ToString();
var text1 = date1.ToLocalTime().ToString();
你可以看到,除了所在的时区,其它都一样。然后用本地时间格式来看,直接就看出差2个小时来了!
  • 打赏
  • 举报
回复
比如说你的某一个客户端使用“北京时间”,另一个客户端使用“美东时间”,它们向同一个服务器程序传送json数据,其中有着时间属性,会出什么问题吗? 不应该会出什么问题。因为你的 json 序列化类库应该是合格的,应该将时间格式准确表示(不管以什么格式表示。通常会使用 ISO 标准格式)。 然后服务器端的.net程序,在反序列化为.net对象时,假设服务器windows系统使用曼谷时间,那么你就能看到 local 类型为曼谷时间的这个时间。 但是这整个自动转换过程中,utc时间标准都是不变的。 所以假设你使用比较“老的”数据库系统,在表示时间上没有.net系统这种“双重标准”的本领,那么你就注意一下你的程序对数据库读写时都用 utc 时间,这就不会出现问题了。
  • 打赏
  • 举报
回复
所有时间都是一样的,根本用不着什么转换,只不过表现形式不同而已。你应该搞懂 DateTime 对象的 UTC 时间表现。 对于时间对象 x,它内部都可以UTC时间为标准,然后你想让它用什么时区去表现,它就会变成那个时区的时间。 你因为不知道UTC时间的标准,所以会有“捧着.net这个金饭碗去要饭”的错觉。 不管你用你的本地时间如何录入,你试试在程序中取这个变量的utc时间试试看?!它会自动转换的。
var date0 = new DateTime(2015, 2, 1, 18, 20, 23, DateTimeKind.Local);
var date1 = new DateTime(2015, 2, 1, 18, 20, 23, DateTimeKind.Utc);
var text0 = date0.ToLocalTime().ToString();
var text1 = date1.ToLocalTime().ToString();
假设你使用早先的SQL Server之类的数据存储服务,假设它的“时间类型”并没有区分UTC还是各地Local标准时间,那么你可以把从不同终端发来的时间,一律以此时间的“UTC时间”来保存。将来要在不同的终端(例如不同语言的网页)上显示时,自动将从SQL Server读取出来的时间作为UTC时间,然后以当地时间(ToLocalTime)来显示。
winnowc 2015-02-01
  • 打赏
  • 举报
回复
没这么复杂,使用.net提供的TimeZoneInfo类就可以,这个使用的是windows提供的时区信息。比如通用的方式:

var chinaZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");
var pstZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");

var time = new DateTime(DateTime.Now.Ticks, DateTimeKind.Unspecified);
var pstTime = TimeZoneInfo.ConvertTime(time, chinaZone, pstZone);
这是把当前时间作为北京时间转换到太平洋时间。当然如果可以确定服务器的时区不变,那么一边用TimeZoneInfo.Local也行。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧