时间戳问题

时间戳 : 从格林威治时间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西经060
1970年1月1日0时1分0秒-01970-1-1 0点1:0
北京东经116东经120601970年1月1日0时1分0秒+81970-1-1 8点1:0
柏林东经13东经15601970年1月1日0时1分0秒+11970-1-1 1点1:0
华盛顿西经77西经75601970年1月1日0时1分0秒-51969-12-31 19点1:0
东京东经139东经135601970年1月1日0时1分0秒+91970-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);// 起点加上时间戳得到时间

  

转载于:https://www.cnblogs.com/mirrortom/p/8045299.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值