[1467] Email

Title Text:My New Year’s resolution for 2014-54-12/30/14 Dec:12:1420001642 is to learn these stupid time formatting strings.<

Origin:https://xkcd.com/1467/

https://www.explainxkcd.com/wiki/index.php/1467:_Email

一个新年漫画,Megan问Beret Guy是否有任何新年的决议,即使这是在新的一年2015之前,他的解决方案是找出电子邮件是什么!

尽管从1998年开始流行使用,当时免费电子邮件提供商出现并且自1982年以来存在SMTP时就存在,Beret Guy显然不明白电子邮件是什么,即使他维护着一个包含他的电子邮件地址的网页。梅根想知道他希望如何发送电子讯息。她解释说,必须定期检查电子邮件,轻微地发送电子邮件,她暗示不值得检查。

Beret Guy提供两种选择:传真和Snapchat。梅根称Snapchat为“赤裸裸的照片”,让人想起有多少用户通过互联网发送自己的裸照。 Beret Guy回复称,人们使用传真机不仅仅是“传真”(一个类似于色情短信的虚构术语),这意味着很多人通过传真发送了性内容,这种技术比SMTP早了十多年。 Beret Guy知道传真是什么,这意味着他在技术领域非常落后,因此他不知道电子邮件是什么意义。但他也知道Snapchat是什么,这个漫画在这部漫画时期非常受欢迎。要么Beret Guy以与电子邮件类似的方式听说过它,要么他肯定知道它是什么和/或使用它。奇怪的是,如果Beret Guy知道Snapchat是什么,他应该知道什么是电子邮件。

标题文本可能是兰德尔2015年的新年决议,指的是各种日期/时间格式。在编程中,时间点(例如当前系统时间)通常作为单个数字存储和处理,该数字表示自称为“epoch”的给定开始时间以来经过的秒数(Unix标准时期是1月1日) ,1970年午夜,UTC)。为了使人们理解,这个数字必须转换为人类可读的格式,但程序员必须选择最能满足用户需求的格式。考虑到针对不同区域存在许多不同的标准格式,针对不同应用的不同精度水平以及“通用时间”与用户的本地时区之间的差异,这可能是要解决的复杂问题。 Randall此前主张广泛采用ISO 8601格式作为通用标准。

标题文本也可能引用了12月29日发生的Twitter中断,这被归咎于日期格式字符串中的错误。

大多数编程语言都提供了使用代表日期/时间不同部分的“标记”来创建自定义日期格式字符串的功能。在这里,Randall似乎使用了其中一个函数,字符串为“%Y-%M-%D%h:%m:%s”,看起来它应该生成日期和时间为“年 – 月 – 日”小时:分钟:秒”。但是,他使用了错误的令牌:

%Y = 4位数年份(2014年)

%M =分钟(54)

%D扩展到%m /%d /%y,即用户本地时区而不是UTC的“月/日/2位数年”。 (“12/30/14” – 见下文)

%h =缩写的月份名称(“Dec”)

%m = 2位数月份(12)

%s = Unix时间戳(自纪元以来1420001642秒)

“%s”标记向我们显示使用的实际Unix时间戳(1420001642),对应于2014-12-31 04:54:02 UTC。上面显示的格式字符串因此产生“2014-54-12 /30/14 Dec:12:1420001642”。请注意,此字符串的中间部分显示“12/30”而不是“12/31” – 这是因为%D令牌在Randall的本地时区(东部标准时间或EST)中表示日期,即5 UTC前几小时。那个时间是前一天23:54:02,或者就在午夜之前。

Randall明显期望结果的正确格式字符串是“%Y-%m-%d%H:%M:%S”,其给出字符串“2014-12-31 04:54:02”(UTC)或“ 2014-12-30 23:54:02“(美国东部时间)。鉴于Randall的字符串与正确字符串之间的相似性,很容易看出这种类型的格式如何令人困惑,并且经常令程序员感到沮丧 – 特别是那些不熟悉这些函数的人。

Randall之前在1179年处理日期/时间格式:ISO 8601和1340:唯一日期(后者正确使用格式化字符串)。

这是Megan手持智能手机的第二部漫画,第一部是1466:电话检查。之前的漫画也是关于智能手机:1465:xkcd Phone 2。

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories