经历长达五年的中断之后,国际C语言混乱代码大赛(IOCCC)恢复举办。IOCCC是
一项国际编程赛事,从1984年开始,每年举办一次(中间也有几年中断)。

备注

如果是要计算北京时间,则需要在上述转换之后的基础上再加上8个小时,因为北京是处于东八区。

  data.timeIntervalSince1970

(文/solidot)    

什么是MJD

百度百科的解释

儒略日(Julian
day,JD)是指由公元前4713年1月1日,协调世界时中午12时开始所经过的天数,多为天文学家采用,用以作为天文学的单一历法,把不同历法的年表统一起来。如果计算相隔若干年的两个日期之间间隔的天数,利用儒略日就比较方便。

  在从网站天气API读取数据的时候,太阳升起的时间竟然是1428183087,有点模糊,感觉去看说明,原来采用的是UTC时间,结果是一个Unix 时间戳。谷歌了一下UTC这个从来没见过的东西,解释如下(来源维基百科)

目的是写出最有创意的最让人难以理解的C语言代码。2011年度的IOCCC大
赛代码递交日期是从11月12日协调世界时11:00到2012年1月12日协调世界时12:12。想参赛的程序员可以先浏览下规则和指南。

转换成UTC

以下是C语言的转换实现代码

//这里的p_byte就是start_time时间
struct tm tm;
double mjd;
int k = 0;

memset(&tm, 0, sizeof(tm));
mjd = (p_byte[0] << 8) | p_byte[1];

tm.tm_year = (int) ((mjd - 15078.2) / 365.25);
tm.tm_mon = (int) (((mjd - 14956.1) - (int) (tm.tm_year * 365.25)) / 30.6001);
tm.tm_mday = (int) mjd - 14956 - (int) (tm.tm_year * 365.25) - (int) (tm.tm_mon * 30.6001);

if ((tm.tm_mon == 14) || (tm.tm_mon == 15))
    k = 1;

tm.tm_year += k;
tm.tm_mon = tm.tm_mon - 2 - k * 12;

/*
 * bcd码转化成int
 * */
tm.tm_sec = p_byte[4]-(p_byte[4] >> 4)*6;
tm.tm_min = p_byte[3]-(p_byte[3] >> 4)*6;
tm.tm_hour = (p_byte[2]-(p_byte[2] >> 4)*6) + 8;

p_tot->i_utc_time = mktime(&tm);
  时间戳在我印象中的作用就是在验证码的时候可以使用。在你设计数据库的时候第一列永远是ID,这个ID可以使用时间戳来表示,而不是1,2,3,4.......。

前言

在EIT表中,有一个字段start_time来描述节目开始的时间,它是一个总共40bit的数值,包含以MJD和UTC表示的时间及日期。其中前16bit表示MJD日期,其余24bit按4bit
BCD编码,表示6个数字。如下图所示

图片 1

本文就来将它转换成标准UTC时间。

- (instancetype)initWithTimeIntervalSince1970:([NSTimeInterval])*seconds*

软硬件环境

  • ubuntu 16.04 64bit
  如果你觉得读不懂维基百科上面关于UTC的说明,很简单,中国属于东八区,UTC+8。了解了就可以了。
  对于编程重要的是时间戳这个概念。

什么是UTC

协调世界时(英:Coordinated Universal Time ,法:Temps
Universel
Coordonné),又称世界统一时间,世界标准时间,国际协调时间。英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。

以下代码是使用iOS swift语言编写的

如果是OC的话,官方的方法其实是一样的,只是写法不一样

代码应该不需要解释了,很简单。

协调世界时,又称世界标准时间世界协调时间,简称UTC(从[英文]”Coordinated
Universal Time”/[法文]“TempsUniversel
Cordonné”而来),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治平时。中国大陆采用ISO
8601:2000的国家标准GB/T
7408-2005《数据元和交换格式 信息交换
日期和时间表示法》中亦称之为协调世界时。台湾采用CNS
7648的《资料元及交换格式–资讯交换–日期及时间的表示法》(与ISO
8601类似)称之为世界协调时间

如果你想从时间获取时间戳也很简单

//时间戳 时间转换
    func changeUTCtoDate(UTCString:Int)->NSString{
       var sunStr = NSString(format: "%d", UTCString)
       var timer:NSTimeInterval = sunStr.doubleValue
       var data = NSDate(timeIntervalSince1970: timer)

       var formatter = NSDateFormatter()
       formatter.dateStyle = NSDateFormatterStyle.ShortStyle
       formatter.dateFormat = "HH:mm"
       var str:NSString = formatter.stringFromDate(data)
       return str
}

最近iOS
文章都会是短篇的文章,因为我要做APP,但是会遇到很多的问题,就得去解决,会发在简书上面,希望大家一起来交流。有想法一起来交流分享。

时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)至当前时间的总秒数。