码迷,mamicode.com
首页 > 其他好文 > 详细

时间戳问题

时间:2017-12-16 00:57:02      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:描述   起点   als   格林威治   one   还原   current   东京   公式   

时间戳 : 从格林威治时间1970年01月01日00时00分00秒,到指定时间的总秒数.

1970年1月1日0时1分0秒的时间戳,用上述办法计算出是60

将60这个时间戳还原成时间就是1970年1月1日0时1分0秒.

//

1.由于世界各地的"时间"是不一样的,比如北京早上8点时,英国伦敦是半夜00点.

2.那么当地球处于时间1970年1月1日0时1分0秒时,北京的时间是1970年1月1日8时1分0秒.而伦敦的时间正好是1970年1月1日0时1分0秒

3.北京和伦敦时间相差的8小时是时间区域划分的结果.

4.时区划分:0度经线起,向东边每15度划分一个时区,时间依次累加1小时,向西边每15度划分一个时区,时间依次累减1小时.因为地球自西向东转,所以东边人先看到太阳,时间比西边人早.

             时区范围是以划分点两侧各7.5度(即划分点平分时区范围).比如0度经线所在的时区范围是西经7.5度到东经7.5度 ,东经15度划分点的时区是东经7.5度到东经22.5度

5.北京天安门在东经116度,是处于东经120度划分点的范围,那么每东经15度加1小时,走过120度正好加了8小时.120/15=8.

6.由此得出第2条描述的结论.为什么0经度要定在伦敦呢,又为什么要东加西减15度一划分呢,这是天文学家开会讨论后定下的.

7.时间戳60这个时间其实是一个"绝对时间",与人习惯的这种太阳在中午12点升得最高,这个12点不是一回事.但是它们之间是有关联的,可以由"绝对时间"推算出本地时间,关联逻辑就是4条所描述的时区划分.

8.那么要得到60时间戳所对应的本地时间(所在时区的时间),公式就是用这个时间加或者减所在地的时区

城市 经度 时区划分点 时间戳 时间戳时间 时区时间 本地时间
伦敦
西经0 西经0 60
1970年1月1日0时1分0秒 -0 1970-1-1 0点1:0
北京 东经116 东经120 60 1970年1月1日0时1分0秒 +8 1970-1-1 8点1:0
柏林 东经13 东经15 60 1970年1月1日0时1分0秒 +1 1970-1-1 1点1:0
华盛顿 西经77 西经75 60 1970年1月1日0时1分0秒 -5 1969-12-31 19点1:0
东京 东经139 东经135 60 1970年1月1日0时1分0秒 +9 1970-1-1 9点1:0

 

9.如何计算某个时区的本地时间的时间戳?

  地球上不同时区在同一刻的时间戳一样.也就是上表中,北京时间1970-1-1 8点1:0,华盛顿时间1969-12-31 19点1:0 其实是处在同一时间,时间戳计算出来都是60.

  如果用那种"减去1970-1-1 0:0:0"这一时间"起点"的做法,那么在北京会得出8*60*60=28800 华盛顿会得出-5*60*60=-18000,不会是60(在伦敦得出的是60)

  时间戳规定时间起点是1970-1-1 0:0:0这一秒,而这个时间是当时伦敦时间.那么在伦敦(0时区)这样计算是没问题的,到别的时区时,需要先将它换成所在时区的时间.

  那么伦敦在1970-1-1 0:0:0时,北京是在1970-1-1 8:0:0,所以这个时间就是在北京的时间起点,要计算北京本地某个时间的时间戳,应当以这个时间点为起点.

10.C#关于时间戳计算用到的类和方法:

  // 计时时间戳首先得到当前时区的时间起点 

  DateTime startTime=TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));

  // 将需要计算的本地时间与起点相减,得到秒数

  DateTime dtNow = new DateTime(1970, 1, 1, 8, 1, 0);// 计算这个时间的时间戳
  TimeSpan toNow = dtNow.Subtract(startTime);// 相减得到时间间隔

  long t = (long)toNow.TotalSeconds;// 转为秒(就是时间戳)

  // 用时间戳得到时间,首先也需要得到当前时区的时间起点,然后用这个起点加上时间戳

  long timestamp=60;// 时间戳是秒为单位

  TimeSpan t = new TimeSpan(timestamp * 1000*1000*10);// 转为时间间隔,参数是100纳秒为单位的时间段

  DateTime dt = startTime.Add(t);// 起点加上时间戳得到时间

  

时间戳问题

标签:描述   起点   als   格林威治   one   还原   current   东京   公式   

原文地址:http://www.cnblogs.com/mirrortom/p/8045299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!