关于Date的冷门知识记录
最近在做项目的时候,用到了Date.toLocaleString来处理当前日期。在这之前,我都是通过get*等方式来获取数据进行拼接。无意间,发现了toLocaleString方法。遂想写一篇文章来记录Date中不常用到的方法,以便以后查看。
做个测试
条件:当前电脑设置时间为北京时间2018-06-29 02:39:41 am
var date = new Date( ); // -> Fri Jun 29 2018 02:39:41 GMT+0800 (中国标准时间)
date.toDateString( ); // -> "Fri Jun 29 2018”
date.toGMTString(); // ->"Thu, 28 Jun 2018 18:39:41 GMT” (差8个小时)
date.toISOString(); // ->"2018-06-28T18:39:41.578Z” (差8个小时)
date.toJSON(); // -> "2018-06-28T18:39:41.578Z" (差8个小时)
date.toLocaleDateString() //->"2018/6/29”
date.toLocaleString() //->"2018/6/29 上午2:39:41” (12小时制)
date.toLocaleTimeString() //->"上午2:39:41” (12小时制)
date.toUTCString() //->"Thu, 28 Jun 2018 18:39:41 GMT” (差8个小时)
一.GMT是什么,UTC是什么,ISO是社么???
ISO
ISO( 全称国际标准ISO 8601),是国际标准化组织的日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。(注意ISO 8601是时间格式,不只有一个格式,而是包含很多格式,想了解更多请跳转ISO( 全称国际标准ISO 8601)官方网站)
UTC|GMT
我们知道,世界各地区与国家经度不同,地方时也有所不同。正式的时区划分,其中包括24个时区,每个地区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同。北京时区是东八区,领先UTC八个小时。(new Date( ) 返回的是GMT+0800(中国标准时间))
从测试看出,*date.toGMTString()*,*date.toISOString()*,*date.toJSON()*,*date.toUTCString()*返回的都是GMT标准时间。
二.一个特殊的日子 ---- 1970年1月1日
众多编程语言都以 1970-01-01 00:00:00 作为计时起点,那1970年0101是什么日子呢,为什么会选择这一天作为计时起点呢?我上网搜寻了一番,发现原因有两点。
#版本一:Unix系统元年
1965年时,贝尔实验室(Bell Labs)加入一项由通用电气(General Electric)和麻省理工学院(MIT)合作的计划;该计划要建立一套多使用者、多任务、多层次(multi-user、multi-processor、multi-level)的MULTICS操作系统。
直到1969年,因MULTICS计划的工作进度太慢,该计划被停了下来。当时,Ken Thompson(后被称为UNIX之父)已经有一个称为”星际旅行”的程序在GE-635的机器上跑,但是反应非常慢,正巧被他发现了一部被闲置的PDP-7(Digital的主机),Ken Thompson和Dernis Ritchie就将”星际旅行”的程序移植到PDP-7上。而这部PDP-7就此在整个计算机历史上留下了芳名。
MULTICS其实是”Multiplexed Information and Computing Service”的缩写,在1970年时,那部PDP-7却只能支持两个使用者,当时,Brian Kernighan就开玩笑地称他们的系统其实是:”UNiplexed Information and Computing Service”,缩写为”UNICS”,后来,大家取其谐音,就称其为”UNIX”了。
1970年可称为”UNIX元年”。 由于很多编程语言起源于UNIX系统,所以编程时间也就以1970-01-01作为计时起点了。
#版本二:最初计算机操作系统是32位,而时间也是用32位表示,Integer.MAX_VALUE68 年就会回归一次。
最初计算机操作系统是32位,而时间也是用32位表示。 System.out.println(Integer.MAX_VALUE); 2147483647 Integer在JAVA内用32位表示,因此32位能表示的最大值是2147483647。
另外1年365天的总秒数是31536000, 2147483647/31536000 = 68.1 也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07 秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为 10000000 00000000 00000000 00000000 也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。而最早出现的UNIX操作系统考虑到计算 机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始 时间)。至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作 系统可以表示到292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。
关于Date的冷门知识记录的更多相关文章
- Web前端理论知识记录
Web前端理论知识记录 Elena· 5 个月前 cookies,sessionStorage和localStorage的区别? sessionStorage用于本地存储一个会话(session) ...
- C#基础知识记录一
C#基础知识记录一 static void Main(string[] args) { #region 合并运算符的使用(合并运算符??) 更多运算符请参考:https://msdn.microsof ...
- DataBase MongoDB基础知识记录
MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...
- MongoDB基础知识记录
MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...
- 关于Excel做表小知识记录
关于Excel做表小知识记录 最近使用Excel做了一系列的报表,觉得这是个很神奇的东西哈哈哈,以前我可是一想到Excel就开始头疼的人... 能用代码或者SQL语句解决的问题绝不会愿意留在Exce ...
- Maven知识记录(一)初识Maven私服
Maven知识记录(一)初识Maven私服 什么是maven私服 私服即私有的仓库.maven把存放文件的地方叫做仓库,我们可以理解成我门家中的储物间.而maven把存放文件的具体位置叫做坐标.我们项 ...
- Linux文件系统知识记录——ext2描述
最近完成了一个编程作业,大致功能是给定一个文件名,给出该文件所在目录和其本身所占用的簇号等信息.笔者选用了Linux的ext系列文件系统作为实验对象,通过实验对ext2文件系统的存储和索引有了一个较为 ...
- 零散知识记录-一个MQ问题
[背景]我有一项零散工作:维护大部门的一台测试公用MQ服务器.当大部分MQ被建立起来,编写了维护手册,大家都按照规程来后,就基本上没有再动过它了.周五有同学跟我反映登录不进去了,周日花了1个小时来解决 ...
- Java实用知识记录 —— 截止到Java8
记录Java实用知识点,截止(包括)到Java8,只作概要的描述,不涉及到具体细节.变量:int.long的包装类支持无符号位操作,即其在内存中的位可以用来全部表示正数."_"可以 ...
随机推荐
- 机智的Popup,带着简单的图表感觉酷酷的
之前有提过用 InfoTemplate 类对 FeatureLayer 的基本信息进行展示,今天为大家介绍 esri/dijit/Popup 的使用,这东西还有 简单的图表展示功能呢! <!DO ...
- arcgis 地理国情建库软件已完成
arcgis 地理国情软件已完成: 1.创建1:25000(或则其他比例尺)国家2000坐标系接合表 2.按照地理国情普查数据库标准,创建标准数据库 3.外业调查工作底图制作 4.矢量和影像数据批量裁 ...
- classifier.cc-recv() [ns2.35]
//without comments int chooseECNSlot() { ; ;i<=nslot_;i++) { *count) { *count); )*ti; ;j<=nslo ...
- Hyper-V迁移---委派
在Hyper-V管理器中-实时迁移,选择“使用kerberos",如图1所示 在AD中,找到Hyper-V宿主,分别设置委派,如图2所示 图1 图2
- C++ 源代码到可执行代码的详细过程
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序. 源代码-- ...
- 原生js实现类名(class)的增、删
先判断是否有这个类名: function hasClass( elements,cName ){ return !!elements.className.match( new RegExp( &q ...
- AngularJs学习笔记--Understanding the Model Component
原版地址:http://docs.angularjs.org/guide/dev_guide.mvc.understanding_model 在angular文档讨论的上下文中,术语“model”可以 ...
- tomcat 8 startup.bat启动乱码问题
修改Tomcat bin目录下startup.bat文件 将call "%EXECUTABLE%" start %CMD_LINE_ARGS% 改为 call "%EX ...
- 修改WSAD的默认工作区(转)
如果要一直用某个目录作为工作区,可以在启动WSAD的时候将该目录设为默认工作区,这样启动时直接启动,方便.快捷.但是如果设置后在想换工作区就比较麻烦了,因为没有可供选择的界面了,跟网上搜了一下总结共有 ...
- Python小技巧:使用*解包和itertools.product()求笛卡尔积
[问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = ['a', 'b'] list2 = ['c', 'd'] ...