以下文章为别处复制来的,一起看看吧。

你还记得“软件真的好难做”中的那个有意思的例子吗?那个例子告诉我们软件开发中假设可能会是致命的事。今天,我又在StackOverflow上看到一个关于时间的问题——为什么1927年12月31日的午夜时间这么奇怪?提问题的这个人给了下面的一段java代码(我做一些修改,保证让你可以copy过去就可以编译运行)

我在其中高亮了几行,这个程序就是想比较一下“1927-12-31 23:54:07”  和  “1927-12-31 23:54:08” 差几秒,很明显,是差一秒。但是程序的输出却不是这样的。

import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.TimeZone;
class time{public static void main(String[] args) throws ParseException {SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");sf.setTimeZone(TimeZone.getTimeZone("Asia/shanghai"));String str3 = "1927-12-31 23:54:07";String str4 = "1927-12-31 23:54:08";Date sDt3 = sf.parse(str3);Date sDt4 = sf.parse(str4);long ld3 = sDt3.getTime() /1000;long ld4 = sDt4.getTime() /1000;System.out.println(ld3);System.out.println(ld4);System.out.println(ld4-ld3);}
}

下面,让我们来看看程序的输出:(是的,差出353秒钟来)

-1325491905
-1325491552
353

Stackoverflow真的很强大,在大家要求发问者给出时区(中国上海)的15分钟内就解决了这个问题。相当的令人惊叹。原因是什么呢?大家需要围观一下这个网页。(为了怕被墙或是被和谐,我已习惯了抓屏保存,如果有人能开发一个软件能随看随抓,然后如果源被删了可以P2P的从已下载了的人那里获取,那么这个软件应该会很有国内市场。蛋扯远了,Sorry)

从上图中我们可以看到—— 在1927年12月31日23:59:59时,往后面的一秒应该是1928年1月1日 0:0:0,但是这个时间被往后调整了5分52秒,而成了,1927年12月31日的,23:54:08,于是,完成了352秒的穿越。于是我们的 Java程序出了这样的一个问题,这真是一个奇迹。

为什么会有这个调整呢?我居然Google不到,不过,我在这个timeanddate.com上查看了一下北京的时间,发现北京的时间只到 1970年,于是我猜想,中国近代历史乱七八糟的政权交替可能是这个原因。于是我看 了一下北京和上海物理时差,果然,北京上海的时差在5分50秒左右。因此,我觉得这个时间的变化应该是从上海时间变成了北京时间。至于你信不信,反正我是信了。

从这个事,我得到下面的一些启示:

  1. Java在的时区实现相当的强大啊。这种细节都能考虑到。
  2. 本地时间的完全就是一锅,应该尽量不用。
  3. 如果你要开发和时区有关系的程序,你的系统里一定要使用GMT标准时间,仅在显示的时候才转成本地时间。
如果你对中国时区有兴趣,你可以访问 《维基百科-中国时区》
各位无证程序员们,看到这个例子,你们是不是感到编程的压力了?呵呵。

转载于:https://www.cnblogs.com/sammyke/archive/2011/09/11/2173538.html

你确信你了解时间吗?相关推荐

  1. golang 切片 接口_Go编程模式:切片,接口,时间和性能

    在本篇文章中,我会对 Go 语言编程模式的一些基本技术和要点,这样可以让你更容易掌握 Go 语言编程.其中,主要包括,数组切片的一些小坑,还有接口编程,以及时间和程序运行性能相关的话题. 本文是全系列 ...

  2. 形容等待时间长的句子_形容等待的时间很漫长的句子

    1.等待,似乎是一种遥远的距离:站在海岸上,盼望着天际的归船:坐在屋顶上,盼望着天空中清凉的雨滴:看着镜中的自己,盼望着明日好运的到来.这里,等待是一种追求,为梦想.为胜利而努力的追求. 2.生命之中 ...

  3. Go编程模式:切片,接口,时间和性能

    更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io 前言 在本篇文章中,我会对 Go 语言编程模式的一些基本技术和要点,这样可以让你更容易掌握 Go 语言编程.其中,主要包 ...

  4. Streaming 101

    开宗明义!本文根据Google Beam大神Tyler Akidau的系列文章<The world beyond batch: Streaming 101>(批处理之外的流式世界)整理而成 ...

  5. 身为开发人员,这些数据库合知识不掌握不合适!

    作者 | Jaana Dogan,谷歌软件工程师 译者 | 弯月,责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 大多数计算机系统都有某种需要保存到存储系统的状态.多年来我积累了许多数据 ...

  6. 「Flink实时数据分析系列」2. 流处理基本概念

    来源 | 「Stream Processing with Apache Flink」 作者 | Fabian Hueske and Vasiliki Kalavri 翻译 | 吴邪 大数据4年从业经验 ...

  7. UVA之11462 - Age Sort

    [题目] You are given the ages (in years) of all people of a country with at least 1 year of age. You k ...

  8. 2023 年适用于 Windows的 12 款最好的视频转换器软件

    我们确信在某个时间点您肯定在某处看到过此消息"不支持视频文件格式".是的,我们能理解你的痛苦!这条单一的警告消息足以扼杀我们要看电影的心情.我们需要视频转换器软件来处理我们生活中如 ...

  9. 机器中的幽灵:人工智能在金融市场的影响、风险及监管

    人工智能将带来的不是不计后果的速度或失控,而是一个具有史无前例深度和广度的洞见,以及依照信息行动并从行动中学习的能力. [编者按]本文作者:Tom Upchurch.Denis McCauley. C ...

最新文章

  1. 64位windows驱动使用asm
  2. 替代微软SMS的好工具——Lansweeper
  3. win10任务栏透明_任务栏1秒变透明,桌面瞬间高大上,美化必备!
  4. 喜报!天虹股份签约神策数据
  5. 找不到php的版本,php – 在任何版本中都找不到请求的包…
  6. html - table分页断行,关于window.print网页分页换页table不断行的处理
  7. Proxy动态代理代码示例
  8. ae 地理坐标与投影坐标转换 [转]
  9. universe是什么牌子_【寰宇影视】品牌介绍→寰宇电影_寰宇娱乐_买购网
  10. Java—筛选法求素数
  11. AI 赋能安全技术总结与展望
  12. android 刷recovery,安卓手机怎么刷入Recovery 命令行刷入Recovery教程
  13. 物联网网线POE供电主控设计方案
  14. 内含扩容源码的面试题,目标是手写HashMap!
  15. linux 打包压缩文件夹命令/压缩文件
  16. Long类型转为String类型
  17. 示例 在 ABAP 中使用自己的 RSA 实现 RSA Encryption in ABAP
  18. 【语音合成】基于matlab线性预测共振峰检测和基音参数语音合成【含Matlab源码 562期】
  19. java实现windows壁纸自动下载与切换
  20. android拨号器(java版)

热门文章

  1. 如何界定你的竞争对手?
  2. php redisson,排查redisson中订阅connection无故消失的问题
  3. 5分钟快速了解微信小程序如何获取收货地址,耶稣也拦不住,我说的!!!
  4. Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT,博主亲自验证有效
  5. python输入一个字母标识符_Python基础入门语法和变量类型(一)
  6. sqlite3:unique constraint failed xxx Frame.No
  7. Cmake构建_指定gcc/g++版本
  8. Windows核心编程_组件透明
  9. 农广传媒获中体基金2000万元Pre-A轮融资
  10. WebSocket和WebRtc的一些心得