Java开发笔记(二)日期与字符串的互相转换

举报
凭栏兔 发表于 2024/10/26 16:00:11 2024/10/26
【摘要】 前面介绍了如何通过Date工具获取各个时间数值,但是用户更喜欢形如“2018-11-24 23:04:18”这种结构清晰、简洁明了的字符串,而非啰里八唆依次汇报每个时间单位及其数值的描述。既然日期时间存在约定俗成的习惯表达,那就有劳程序员手工把日期时间转换成字符串呗,于是利用String类型的format方法,可将各个时间单位按照规定格式拼接成符合要求的字符串。下面是通过String.for...

前面介绍了如何通过Date工具获取各个时间数值,但是用户更喜欢形如“2018-11-24 23:04:18”这种结构清晰、简洁明了的字符串,而非啰里八唆依次汇报每个时间单位及其数值的描述。既然日期时间存在约定俗成的习惯表达,那就有劳程序员手工把日期时间转换成字符串呗,于是利用String类型的format方法,可将各个时间单位按照规定格式拼接成符合要求的字符串。下面是通过String.format方法转换日期时间的代码例子:

		Date date = new Date();
		// 手工拼接指定格式的日期时间字符串
		String dateTimeDesc = String.format("%d-%d-%d %d:%d:%d", 
				date.getYear()+1900, date.getMonth()+1, date.getDate(),
				date.getHours(), date.getMinutes(), date.getSeconds());
		System.out.println("dateTimeDesc="+dateTimeDesc);

 运行上面的格式化代码,得到的日志结果如下所示:

dateTimeDesc=2018-11-25 11:18:53

 虽然利用String.format方法能够得到大众熟知的日期时间串,可是这个办法实在太拖沓冗长了,一个简简单单的功能却写了好几行代码。为此Java又提供了专门的日期格式化工具SimpleDateFormat,首先为该工具创建一个指定格式的格式化实例,然后调用它的format方法,即可将某个日期实例转换为规定格式的字符串。按照以上步骤编写的格式化代码例子如下:

	// 获取当前的日期时间字符串
	public static String getNowDateTime() {
		// 创建一个日期格式化的工具
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		// 将当前日期时间按照指定格式输出格式化后的日期时间字符串
		return sdf.format(new Date());
	}

 注意到上述代码的日期时间格式存在大小写字母揉合的情况,为避免混淆,有必要对这些格式字符串进行取值说明,详述如下:
小写的yyyy:表示四位年份数字,如1949、2017等等。
大写的MM:表示两位月份数字,如01表示一月份,12表示12月份。
小写的dd:表示两位日期数字,如08表示当月八号,26表示当月二十六号。
大写的HH:表示24小时制的两位小时数字,如19表示晚上七点。
小写的hh:表示12小时制的两位小时数字,如06可同时表示早上六点与傍晚六点;因为12小时制的表达会引发歧义,所以实际开发中很少这么使用。
小写的mm:表示两位分钟数字,如30表示某个点钟的三十分。
小写的ss:表示两位秒钟数字。
大写的SSS:表示三位毫秒数字。
其余的横线“-”、空格“ ”、冒号“:”、点号“.”等字符,仅仅是连接符号,方便观看各种单位的时间数字而已;对于中文世界来说,也可采用形如“yyyy年MM月dd日HH时mm分ss秒”的格式标记。
现在有了日期格式化工具SimpleDateFormat,以及每个时间单位的标记字符,想要输出特定格式的日期时间串就易如反掌了。譬如只需单独的日期串,无需后面的时间串,则可指定格式化标记为“yyyy-MM-dd”,相应的日期格式化代码如下所示:

	// 获取当前的日期字符串
	public static String getNowDate() {
		// 创建一个日期格式化的工具
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		// 将当前日期按照指定格式输出格式化后的日期字符串
		return sdf.format(new Date());
	}

 又如仅需单独的时间串,无需前面的日期串,则可指定格式化标记为“HH:mm:ss”,相应的时间格式化代码如下所示:

	// 获取当前的时间字符串
	public static String getNowTime() {
		// 创建一个日期格式化的工具
		SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
		// 将当前时间按照指定格式输出格式化后的时间字符串
		return sdf.format(new Date());
	}

 以上的时间格式化只精确到秒,若需精确到毫秒,则可在原来的时间标记末尾添加“.SSS”,表示输出的时间串需要补充三位毫秒数字,此时的时间格式化代码如下所示:

	// 获取当前的时间字符串(精确到毫秒)
	public static String getNowTimeDetail() {
		// 创建一个日期格式化的工具
		SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
		// 将当前时间按照指定格式输出格式化后的时间字符串(精确到毫秒)
		return sdf.format(new Date());
	}

 有时候考虑到代码内部的方便处理,要求日期时间串为不带任何标点的纯数字串,那么可采取形如“yyyyMMddHHmmss”的日期时间标记,于是将格式化代码改写成下面这样:

	// 获取当前的日期时间字符串(纯数字,不包含其它标点符号)
	public static String getSimpleDateTime() {
		// 创建一个日期格式化的工具
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		// 将当前日期时间按照指定格式输出格式化后的日期时间字符串
		return sdf.format(new Date());
	}

 SimpleDateFormat的作用并不限于将日期类型转换为字符串类型,它还支持将字符串转换为日期类型,这时用到的便是parse方法。具体的转换步骤依旧分成两步,第一步先创建一个指定标记的格式化实例,第二步调用该实例的parset方法,即可将某个对应格式的字符串转换为日期实例。以下代码演示了如何把字符串转换为日期类型的过程:

		String str = "2018-11-25 11:18:53";
		// 创建一个日期格式化的工具
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		// 从字符串中按照指定格式解析日期时间信息
		Date dateFromStr = sdf.parse(str);


更多Java技术文章参见《Java开发笔记(序)章节目录

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。