R 菜鸟生活篇 夏令时

真令人难以置信,昨天还在下雪,明天凌晨竟然要改夏令时了。谁能告诉我,春天在哪里?藏在小朋友的眼睛里?

夏时制,学名叫做日光节约时制。土木坛子曾经撰文详细介绍过(点我)。大家总是说某天要把表拨快或拨慢一小时,以前我一直弄不清楚到底是拨快还是拨慢,直到有一天发现了一个窍门,才再也不出错了。这个窍门就是:

夏天到的时候,欧洲的时间距离中国更近了。

为啥这就好记呢?因为给家中老人打电话的适宜时间(我睡醒后并且老人睡着前)就多出了一小时。亲近祖国,这跟德国的夏天一样给人的感觉是美好的。美好的感觉是容易记住的。

上面用 R 做出的这张拜罗伊特日出日落时刻图,虚线和实线分别显示的是不使用和使用夏时制的日出日落时刻。很容易看出夏时制的好处:夏天把这一小时往后挪了之后,不至于天亮之后过很久才需要上班,并且下班后距离天黑还有很长时间可以让人去泡吧,泡网,泡妞……不挪到下午的话,这一个小时在早上只够泡个澡。

R 在处理时间数据的时候充分考虑了夏时制,说起来这也是我用 R 处理数据时遇到的一件趣事,至今记忆犹新。由于明天凌晨 2 点钟要把时钟拨到 3 点,因此在德国时间里,2013 年 3 月 31 日 2:00:00 到 2:59:59 这段时间在地球上是不存在的!不信你可以在 R 里边试试,看看这段时间发生了什么:

a <- as.POSIXlt("2013-03-31 03:00:00", tz = "CET") # 中欧时间
a
## [1] "2013-03-31 03:00:00 CET"

# 3 点钟的前一秒难道不是 2:59:59 吗?
a - 1  
## [1] "2013-03-31 01:59:59 CET"

# 换个函数试试。
# a <- strptime("2013-03-31 03:00:00", format = "%Y-%m-%d %H:%M:%S", tz = "CET")
a
## [1] "2013-03-31 03:00:00 CEST"
a - 1
## [1] "2013-03-31 01:59:59 CET"

# 如果我硬来,非要找回 2 点钟呢?
# a <- as.POSIXlt("2013-03-31 02:00:00", tz = "CET")
a
## [1] "2013-03-31 CET"

# 换个函数试试?
a <- strptime("2013-03-31 02:00:00", format = "%Y-%m-%d %H:%M:%S", tz = "CET") # 
a
## [1] "2013-03-31 02:00:00 CET"

# 欧叶!但是......`
a - 1
## [1] NA
# 啊哦。

若要避免这种情况发生,还是强行都设置成 GMT 保险。

话说我上小学的时候正值我国推行夏时制那几年,记忆中仍能嗅到当年时钟调来调去给小学生带来的新鲜和烦恼的味道。我上小学时刚刚出生的那些小孩如今都在跟我一起读博士,聊起来对那几年丝毫没有记忆,这让高龄的我情何以堪啊!

R 菜鸟生活篇 夏令时》上有8条评论

    1. dapeng 文章作者

      我这不是告诉你了吗?周一放假是因为复活节吧。要是因为夏令时都放假,也过分了点。

      回复
  1. Yuanchen Xie

    Danke!双系统的时候Win和Linux一个GMT一个UTC也很D疼……总是差8小时。留言板又调整了啊。再歪一楼:请问opseSUSE在德国使用的很广泛吗?

    回复
    1. dapeng 文章作者

      对。Windows 和 Linux 日常用起来都很舒服,只是切换起来烦人。你是说 openSUSE 吗?我不了解德国的全貌。只是我身边没人用。日常办公用的不是 Windows 就是 Ubuntu,或者 Mac。

      回复
      1. Chaneyen

        我从 opsnSUSE 12.3 发布才开始折腾这个发行版,原以为德国自己的产品在他们本土会很受重用,竟然又是 Ubuntu……以前听说在 Slackware 的年代他们就在教育部门推广了,不知道真假。装虚拟机也是一个很不错的选择,只是我的机子太老了,有点跑不动……

        回复
        1. dapeng 文章作者

          我接触的德国人有限,没法代表全德。再说德国并不像我们有大国意识,国庆节在德国人眼里啥都不算。不过,我们研究组书架上倒是有一套 openSUSE 的安装盘,太老了,没人碰过。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax