任务描述
本关任务:接收给定的日期时间字符串,输出该日期是该年中的第几天、年月日、24 小时制的时、两位数的分钟以及两位数的秒钟。
相关知识
为了完成本关任务,你需要掌握: 1.日期的格式化; 2.时间的格式化; 3.时间与日期的组合格式化。
日期的格式化
在程序设计中,经常涉及到时间以及日期的输入输出,想要输出满意的日期和时间格式需要大量的代码和算法才能实现。Java 中 format() 方法通过使用特定的转换字符作为参数来实现对时间和日期的格式化,极大的方便了平时的使用。
我们可以使用如下代码得到当前日期是当月的第几天:
1. // 创建Date对象,date对象表示特定日期和时间
2. Date date = new Date("2020/02/03 20:50:31");
3.
4. System.out.println(date);
5. System.out.println(String.format("今天是一个月中的第:%te天",date));
执行结果:
Mon Feb 03 20:50:31 CST 2020
今天是一个月中的第:3天
上述代码中 %te 是转换符,常用的日期转换符如下表所示。
转换符 | 说明 | 示例输出 |
%ta | 星期几简称 | 星期一 |
%tb | 月份简称 | 二月 |
%te | 一个月中的第几天 | (1-31) |
%tc | 包括全部日期和时间信息 | 星期二,三月 25 13:37:22 cst 2019 |
%td | 一个月中的第几天(01-31) | 02 |
%tm | 月份 | 03 |
%ty | 2位年份 | 19 |
%tY | 4位年份 | 2019 |
%tj | 一年中的第几天(001-366) | 03 |
示例:
1. // 创建Date对象,Date对象表示系统当前日期时间
2. Date date = new Date();
3. System.out.println(date);
4. String day = String.format("%te", date); // 一个月中的某一天。
5. String month = String.format("%tb", date); // 指定语言环境下的月份
6. String week = String.format("%ta", date); // 指定环境下星期
7. String foryear = String.format("%tY", date); // 四位年份
8. String oneyearday = String.format("%tj", date); // 一年中的第几天
9. String onemonthday = String.format("%td", date); // 一个月中的第几天
10. String onemonth = String.format("%tm", date); // 月份(纯数字)
11. String twoyear = String.format("%ty", date); // 两位数年份
12.
13. System.out.println(day);
14. System.out.println(month);
15. System.out.println(week);
16. System.out.println(foryear);
17. System.out.println(oneyearday);
18. System.out.println(onemonthday);
19. System.out.println(onemonth);
20. System.out.println(twoyear);
执行结果:
1. Mon Feb 03 21:04:26 CST 2020
2. 3
3. 二月
4. 星期一
5. 2020
6. 034
7. 03
8. 02
9. 20
时间的格式化
使用 format() 方法,不仅能够实现日期的格式化,还可以实现时间的格式化,它可以将时间格式化为时,分,秒,毫秒。格式化时间的转换符如下表。
转换符 | 说明 | 示例 |
%tH | 2位数的24小时制小时(00-23) | 14 |
%tI | 2位数的12小时制小时(01-12) | 05 |
%tK | 2位数的24小时的小时(0-23) | 5 |
%tl | 2位数的12小时制的小时(1-12) | 10 |
%tM | 2位数的分钟(00-59) | 05 |
%tS | 2位数的秒数 | 14 |
%tL | 3位数的毫秒数 | 920 |
%tN | 九位数的微妙数 | 062000000 |
%tp | 上午或下午的标记 | 下午 |
%tz | 相对于GMT RFC 82格式的数字时区偏移量 | CST |
%tZ | 时区的缩写形式的字符串 | CST |
%ts | 1970-01-01 00:00:00 至现在经过的秒数 | 1206426646 |
%tQ | 1970-01-01 00:00:00 至现在经过的毫秒数 | 1206426737453 |
使用示例:
1. Date date = new Date();
2. System.out.println(date);
3. String hour=String.format("%tH", date); // 格式化date,24小时制的小时。
4. String minute=String.format("%tM", date); // 两位数的分钟。
5. String second=String.format("%tS", date); // 两位数的秒钟。
6. System.out.println("现在的时间是:"+hour+"点"+minute+"分"+second+"秒"); // 输出时间。
执行结果:
1. Mon Feb 03 21:11:42 CST 2020
2. 现在的时间是:21点11分42秒
时间与日期的组合格式化
在日常使用中,我们通常需要输出固定格式的时间日期,一方面,我们可以通过组合以上格式化转化符来实现(较麻烦),另一方面,我们可以使用以下固定的格式化来实现。
转换符 | 说明 | 示例 |
%tF | 按照年-月-日格式输出(4位年份) | 2019-2-26 |
%tD | 月/日/年格式输出(2位年份) | 02/26/19 |
%tc | 输出全部日期和时间信息 | 星期三 三月 25 15:20:03 CST 2019 |
%tr | 时:分:秒 PM(AM)格式(12小时制) | 10:23:45 下午 |
%tT | 时:分:秒格式(12小时制) | 15:23:34 |
%tR | 时:分格式(24小时制) | 15:34 |
示例:
1. Date date = new Date();
2. System.out.println(date);
3. // 第一种日期格式 2019-03-26
4. String day1=String.format("%tF", date);
5. // 第二种日期格式 03/26/19
6. String day2=String.format("%tD", date);
7. // 第一种时间格式 03:22:34 下午 (时:分:秒 PM/AM 12小时制)
8. String time1=String.format("%tr", date);
9. // 第二种时间格式 15:34:23 (时:分:秒 24小时制)
10. String time2=String.format("%tT", date);
11. // 第三种时间格式 15:23 (时:分)
12. String time3=String.format("%tR", date);
13. // 输出全部时间日期信息
14. String timeandday=String.format("%tc",date);
15. // 输出各种格式化时间日期
16. System.out.println(day1);
17. System.out.println(day2);
18. System.out.println(time1);
19. System.out.println(time2);
20. System.out.println(time3);
21. System.out.println(timeandday);
执行结果:
1. Mon Feb 03 21:34:37 CST 2020
2. 2020-02-03
3. 02/03/20
4. 09:34:37 下午
5. 21:34:37
6. 21:34
7. 星期一 二月 03 21:34:37 CST 202
import java.util.Date;
import java.util.Scanner;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
// 第一步:接收给定的日期时间字符串
Scanner input = new Scanner(System.in);
String str = input.nextLine();
// 第二步:创建Date对象
Date date = new Date(str);
// 第三步:格式化输出给定日期时间字符串是该年中的第几天
String one_year_day = String.format("%tj", date);//一年中的第几天
System.out.println("该日期是这一年中的第" + one_year_day + "天");
// 第四步:格式化输出给定日期和时间字符串的年月日
String day = String.format("%tF", date);//xxxx-xx-xx
System.out.println("该日期的年月日为:" +day);
// 第五步:格式化输出给定日期和时间字符串的24小时制的小时
String hour = String.format("%tH", date);//格式化date,24小时制的小时。
System.out.println("时:" + hour);
// 第六步:格式化输出给定日期和时间字符串的两位数的分钟
String minute = String.format("%tM", date);//两位数的分钟。
System.out.println("分:" + minute);
// 第七步:格式化输出给定日期和时间字符串的两位数的秒钟
String second = String.format("%tS", date);//两位数的秒钟。
System.out.println("秒:" + second);
/********** End **********/
}
}