swift做时间转换1990年4月15日为nil

先看一段代码:

swift:

1
2
3
4
5
6

var dateFormatter = NSDateFormatter()

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let date = dateFormatter.dateFromString("1990-04-15 00:00:00")

运行上述代码之后你会神奇的发现, date 竟然是 nil ,而且 nil 的情况仅仅发生在1990年4月15日凌晨0点至1点之间。

经过在群里的激烈讨论,大家去各地翻找资料,最终得出结论如下:

  • 因为东八区的夏令时导致

实行夏令时的建议最早由窦星元提出。1986年4月,中共中央办公厅和国务院办公厅发出《在全国范围内实行夏令时的通知》,通知动员全国人民为节约能源而早睡早起,并要求全国各部门做好宣传和安排工作。具体作法是:每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时间),再将时钟拨慢一小时,即将表针由2时拨至1时,夏令时结束。在夏令时开始和结束前几天,新闻媒体均刊登有关部门的通告。值得注意的是,夏令时中出生的人,生时须减去1小时。在夏令时开始和结束前几天,新闻媒体均刊登有关部门的通告。1992年起,夏令时暂停实行。

结论:所以在进行时区转换时,在中国,公历1986年至1992年之间4月必有一天少一个小时(例如90年4月15日和87年4月12日),9月份必有一天多一个小时。

大家以后碰到这种情况导致崩溃最好做下处理哈,另外除了 swiftoc 也是一样的,并且经过网友测试, java 这个日期会直接跳到凌晨1点01~
goodluck!


Comments