Java开发笔记(一百五十二)Date工具的时间格式
Java开发经常要把当前时间转为字符串,比如“2020-07-08 22:59:48”这样,此时会用到格式化工具SimpleDateFormat,该工具通过下列字符表示不同的时间单位:
小写的yyyy:表示四位年份数字,如1949、2017等等。
大写的MM:表示两位月份数字,如01表示一月份,12表示12月份。
小写的dd:表示两位日期数字,如08表示当月八号,26表示当月二十六号。
大写的HH:表示24小时制的两位小时数字,如19表示晚上七点。
小写的mm:表示两位分钟数字,如30表示某个点钟的三十分。
小写的ss:表示两位秒钟数字。
按照“2020-07-08 22:59:48”这种字符串样式,对应的日期格式为“yyyy-MM-dd HH:mm:ss”,于是将日期时间转为字符串的代码如下所示:
// 获取当前的日期时间字符串
public static String getNowDateTime() {
// 创建一个日期格式化的工具
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 将当前日期时间按照指定格式输出格式化后的日期时间字符串
return sdf.format(new Date());
}
注意到上述的时间标记有区分大小写,意味着大写字母与小写字母表达的时间是不一样的。例如,大写的MM表示两位月份,而小写的mm表示两位分钟。除此之外,还有以下不怎么常见的时间标记:
大写的YYYY:同样表示四位年份数字,但它并非指定日期所处的年份,而是指定日期所在周的最后一天(星期六)位于哪个年份。
大写的D:表示从当年的1月1日开始算的第几天。
小写的hh:表示12小时制的两位小时数字,如06可同时表示早上六点与傍晚六点。
大写的SSS:表示三位毫秒数字。
以上四种时间标记,特别注意大写的YYYY,因为其他标记不管怎样都是取指定日期的某种单位,可是YYYY居然没从指定日期取数,而是先找到那个日期所处的星期,找到那个星期的最后一天,再瞧瞧最后一天在哪个年份。关键每星期的最后一天究竟是星期几呢?按照中国人的习惯,每周最后一天是星期日,然而在西方人看来,每周最后一天却是星期六,所以YYYY要找的正是那个星期的星期六呀。
话虽如此,还得实地验证一下才行。先看2004年12月31日,当天是星期五,那周的星期六是2005年1月1日,星期日是2005年1月2日。由于不管星期六还是星期日都落在2005年,因此那周的YYYY理应返回2005年,于是编写下面的年份标记验证代码:
try {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf1.parse("2004-12-29"); // 2004-12-31是星期五,2005-01-01是星期六
SimpleDateFormat sdf2 = new SimpleDateFormat("YYYY-MM-dd");
String str = sdf2.format(date);
System.out.println("str="+str);
} catch (ParseException e) {
e.printStackTrace();
}
运行上面代码,看到如下所示的输出日志,果然2004年底的YYYY变成了2005。
str=2005-12-29
再看2005年12月31日,当天是星期六,那周的星期日是2006年1月1日。由于那周的星期六落在2005年,而星期日落在2006年,因此那周的YYYY应当返回2005年(如果每周最后一天是星期六的话)。此时年份标记验证代码示例如下:
try {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf1.parse("2005-12-29"); // 2005-12-31是星期六,2006-01-01是星期日
SimpleDateFormat sdf2 = new SimpleDateFormat("YYYY-MM-dd");
String str = sdf2.format(date);
System.out.println("str="+str);
} catch (ParseException e) {
e.printStackTrace();
}
运行上面代码,看到如下所示的输出日志,发现2005年底的YYYY仍为2005,从而证明了这个结论:在Java编程当中,星期六才是每周的最后一天。
str=2005-12-29
更多Java技术文章参见《Java开发笔记(序)章节目录》
Java开发笔记(一百五十二)Date工具的时间格式的更多相关文章
- Java开发笔记(五十二)对象的类型检查
前面介绍了类的多态性,来自于鸡类的实例chicken,既能用来表达公鸡实例,也能用来表达母鸡实例.可是这导致了一个问题,假如在call方法内部需要手工判断输入参数属于公鸡实例还是母鸡实例,那该如何是好 ...
- Java开发笔记(八十二)注解的基本单元——元注解
Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义.前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: @ ...
- Java开发笔记(三十二)字符型与整型相互转化
前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允 ...
- Java开发笔记(四十二)日历工具的常见应用
前面介绍了日历工具Calendar的基本用法,乍看起来Calendar与Date两个半斤八两,似乎没有多大区别,那又何苦庸人自扰鼓捣一个新玩意呢?显然这样小瞧了Calendar,其实它的作用大着呢,接 ...
- Java开发笔记(五十)几种开放性修饰符
前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当 ...
- Java开发笔记(五十六)利用枚举类型实现高级常量
前面介绍了联合利用final和static可实现常量的定义,该方式用于简单的常量倒还凑合,要是用于复杂的.安全性高的常量,那就力不从心了.例如以下几种情况,final结合static的方式便缺乏应对之 ...
- Java开发笔记(五十四)内部类和嵌套类
通常情况下,一个Java代码文件只定义一个类,即使两个类是父类与子类的关系,也要把它们拆成两个代码文件分别定义.可是有些事物相互之间密切联系,又不同于父子类的继承关系,比如一棵树会开很多花朵,这些花儿 ...
- Java开发笔记(五十五)关键字static的用法
前面介绍嵌套类的时候讲到了关键字static,用static修饰类,该类就变成了嵌套类.从嵌套类的用法可知,其它地方访问嵌套类之时,无需动态创建外层类的实例,直接创建嵌套类的实例就行.其实static ...
- Java开发笔记(五十八)简单接口及其实现
前面介绍了抽象方法及抽象类的用法,看似解决了不确定行为的方法定义,既然叫唤动作允许声明为抽象方法,那么飞翔.游泳也能声明为抽象方法,并且鸡类涵盖的物种不够多,最好把这些行为动作扩展到鸟类这个群体,于是 ...
- Java开发笔记(五十九)Java8之后的扩展接口
前面介绍了接口的基本用法,有心的朋友可能注意到这么一句话“在Java8以前,接口内部的所有方法都必须是抽象方法”,如此说来,在Java8之后,接口的内部方法也可能不是抽象方法了吗?之所以Java8对接 ...
随机推荐
- devops 2024
What is DevOps? DevOps is a mindset, a culture, and a set of technical practices. It provides commun ...
- nodejs读写yaml
nodejs读写yaml npm install -g js-yaml // read.js const fs = require('fs'); const yaml = require('js-ya ...
- nacos安装
linux-docker 下载nacos docker pull nacos/nacos-server:v2.2.3 `` ## 下载git脚本 ```shell cd /prod mkdir nac ...
- 重载(Overloading)与重写(Override)的区别?
重载(Overloading)与重写(Override)的区别? No. 区别 重载 重写 1 英文单词 Overloading Override 2 发生范围 发生在一个类里面 发生在继承关系中 3 ...
- 工具 | ysoSimple
0x00 简介 ysoSimple是一款简易的Java漏洞利用工具,集成Java反序列化,Hessian反序列化,XStream反序列化,SnakeYaml反序列化,Shiro550,JSF反序列化, ...
- c#开发完整的Socks5代理客户端与服务端(已完结)
本文我们介绍下如何在Windows系统上开发一个代理本机流量的客户端,并且对接我们之前开发的Socks5服务端,实现整个代理的一条龙.对于Socks5代理的服务端的开发可以详见之前的文章. 目录 本机 ...
- 一些 DP 思维题
最单纯的思维题就是想出来思路就会做,几乎没有实现难度的题.这种题 CF 与 Atcoder 比较多,这里集中记录一下. 对于 DP 而言,思维题只需要想出转移方程即可. CF1174E Ehab an ...
- 如何用IDEA 生成JavaDoc新版
用IDEA生成JavaDoc 左上角四横杠点击,唤出工具栏(快捷键 alt+\) 左键单击工具选项 下拉框选 生成Javadoc 在弹出框选好参数立刻导出啦 1.JavaDoc 作用域: 选要导出的文 ...
- Numpy 的广播机制
广播机制在numpy中居于非常重要的位置,也是numpy高效计算的秘密武器,有必要进行深入彻底的理解,简而言之,它的规则如下: 规则1:如果两个数组在维度上不一样,那么维度低的数组用1(1个或者多个) ...
- Django中自定义错误处理
1.将项目中的settings.py中的DEBUG=False,ALLOWED_HOSTS = ['localhost'] 2.在项目settings.py中TEMPLATES列表中的DIR定义的路径 ...