java date只保留年月日_7秒钟记住C++、Java、Python等语言的25种时间格式

bef1edb8bc933cfdcdcde8069085ae10.png

时间格式概述

衍生自语言C的编程语言C++、Java、JavaScript、Python等均采用一致的时间格式。我们以C的strftime函数为例。

查阅手册,满屏的格式,读得人头晕目眩。

dc39f4d871dd4bf898c817b7d4517c50.png

以上格式,依照循序渐渐的策略,将其分为9个变量和4个大类,概括如下:

8de091da200a83dcf18aef25e74be7e1.png

第一行的常规符号

1.1 宏观尺度:年月日

宏观尺度下的年(year)月(month)日(day),全部取其首字母,并且是小写的形式。

$ date +"%y-%m-%d"20-06-12

不足之处是年度只有两位数字。

1.2 微观尺度:时分秒

微观尺度下的时(Hour)分(Minite)秒(Second),也是取首字母。与年月日不同的是,首字母都为大写。

$ date +"%H:%M:%S"09:27:19

输出的是24小时制的时间。

组合宏观与微观尺度:

$ date +"%y-%m-%d %H:%M:%S"20-06-12 09:28:49

1.3 中观尺度:周几与周数

周几(Weekday)与周数(Week Number)同样取其首字母,其一为小写,其二为大写。

$ date +"%w" #周几?5

需要注意的是周日是起始点记为0。

1.4 地理尺度:时区

时区(timezone)度量的是我们的地理坐标,取Zone的首字母 z

$ date +"%z"+0800

输出当前在东八区。

1.5 小结第一行

时间9个变量,按照宏观、微观、中观和地理尺度分类四类,即:年月日/时分秒/周几周数/时区。

如果我们自己设计创造时间格式的符号,仅仅从直觉出发也会采用第一行中思路,以首字母指代。

第二行的简单扩展

第二行弥补首行的不足,作简单的扩展和修正。

2.1 四位数字的年份

宏观尺度下的年月日均为小写字母,优化年份只有两位数字的问题,只能打破这一原则,因引入大写字母Y(Year)。

$ date +"%Y-%m-%d"2020-06-12

2.2 12小时制

%H 是24小时制,H 的后一个英文字母为 I。于是以 %I 表达12小时制,同时用 %p(postnoon) 代表上下午的划分。

$ date +"%I:%M:%S %p"10:04:50 AM

注意到 %I 遵照了微观尺度的管理,是大写的形式;而 %p 却是小写的形式。我们可以理解为 %p 是宏观尺度上的半天,因此遵循’年月日‘格式的惯例。(大写的 %P 输出小写的 am和pm,大写却输出小写,比较违反直觉,略去不提)。

2.3 小结第二行

打印第二行的完整格式为:

$ date +"%Y-%m-%d %I:%M:%S %P"2020-06-12 10:09:20 AM

第三行的文字描述

第三行最有意思,有且仅有三个时间变量能用文字描述,分别为字母表的头两个字幕a与b,和字母表的最末一个字幕 Z。

A,B分别表示周天和月份,Z是时区的文字描述。

$ date +"%A %B %Z"Friday June CST$ date +"%a %b %Z"Fri Jun CST

CST是 China Standard Time的缩写。

此时,我们查看著名的C语言的ctime时间格式:

In [2]: time.ctime()Out[2]: 'Fri Jun 12 10:17:50 2020'

我们可以表示为:

$ date +"%a %b %d %H:%M:%M %Y"Fri Jun 12 10:20:20 2020$ date +"%c"Fri 12 Jun 2020 10:23:04 AM CST

第四行的晦涩扩展

此处的晦涩一是指所用的字幕与其英文含义没有关联,二是平常用得不多的格式。

4.1 年份与计日

%C 指代四位数字的前两位,补全了两位数的 %y。%q(quater)表示季度。%j 计算一年过去了多少天。

$ date +"现在是%C%y年的第%q季度,一年中的第%j天"现在是2020年的第2季度,一年中的第164天

4.2 微秒

微秒的英文是 millisecond,与 %f 没有关系。此处我们将 %f 理解为 fly,时光飞逝。

4.3 周天与周数的问题

第一行的 %w 打印周日为 0,用与w紧挨着的前一个字母 u 解决这个问题。

$ date -d "2 days" +"两天后的周日是一周的第%u天"两天后的周日是一周的第7天$ date -d "2 days" +"两天后的周日是一周的第%w天"两天后的周日是一周的第0天

周数中的%W是以周一为一周的起点,并且从第00周开始计算;

W的前一个字母V,%V同样以周一为一周的起点,但从第01周开始计算;

再前一个字幕U,%U却是以周日为一周的起点,从第00周计算。

换言之,这三个选项,我们用得最多的是 %V。

总结

本文的写作初衷是经由循序渐进的逻辑思路整理所有的时间格式,最终达到看一眼就能了然于胸,无需再耗费精力刻意记忆或者投入时间查阅手册的目的。

尝试解析命令date的标注输出

$ dateFri 12 Jun 2020 11:06:43 AM CST

解析为:

$ date +"%a %d %b %Y %I:%M:%S %p %Z Week-%V day-%j"Fri 12 Jun 2020 11:10:36 AM CST Week-24 day-164

整理表格如下:

95b35825b3ec02b957a1db6d08dcefb9.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值