文
章
目
录
章
目
录
学习如何使用java.util.Date
类创建新的日期、获取当前日期、将日期解析为字符串或格式化Date
对象。这些用例经常需要使用,在一个地方了解它们将有助于为我们许多人节省时间。
值得注意的是,Date
实例没有与之关联的时区信息。Date
实例表示自Epoch以来的毫秒数。如果我们打印Date
实例,它始终打印机器的默认或本地时区。因此,在Date.toString()
方法中打印的时区信息不应误导您。
1.将日期格式化为字符串
使用SimpleDateFormat.format()
将日期格式化为字符串的Java程序。请注意,SimpleDateFormat
不是线程安全的类,因此不应将其实例共享给多个线程。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(new Date());
请参考SimpleDateFormat
的Java文档以获取详细的日期和时间模式。以下是您可以使用的最常见日期和时间模式字母及其含义列表:
y
: 年份(yy或yyyy)M
: 月份(MM)d
: 月份中的日期(dd)h
: 小时(1-12)(hh)H
: 小时(0-23)(HH)m
: 小时中的分钟(mm)s
: 秒(ss)S
: 毫秒(SSS)z
: 时区文本(例如,太平洋标准时间…)Z
: 时区,时间偏移(例如,-0800)
格式 | 示例 |
---|---|
yyyy-MM-dd (ISO) |
“2018-07-14” |
dd-MMM-yyyy |
“14-Jul-2018” |
dd/MM/yyyy |
“14/07/2018” |
E, MMM dd yyyy |
“Sat, Jul 14 2018” |
h:mm a |
“12:08 PM” |
EEEE, MMM dd, yyyy HH:mm:ss a |
“Saturday, Jul 14, 2018 14:31:06 PM” |
yyyy-MM-dd'T'HH:mm:ssZ |
“2018-07-14T14:31:30+0530” |
hh 'o''clock' a, zzzz |
“12 o’clock PM, Pacific Daylight Time” |
K:mm a, z |
“0:08 PM, PDT” |
2.将字符串解析为日期
Java程序示例,使用SimpleDateFormat.parse()
方法将字符串解析为Date
实例。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateInString = "2023-09-08 10:20:56";
Date date = sdf.parse(dateInString);
3.获取当前日期和时间
java.util.Date
类表示自纪元以来经过的日期和时间。以下是用于获取当前日期和时间并以指定格式打印的Java程序示例。
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));
作为参考,自Java 8以来,我们可以使用LocalDate
、LocalTime
和LocalDateTime
类来处理日期和时间。这些类提供了更灵活、更强大的日期和时间操作功能。
LocalDate today = LocalDate.now();
System.out.println("Today's Local date : " + today);
LocalTime time = LocalTime.now();
System.out.println("local time now : " + time);
4. 转换Date和Calendar
4.1. 将Calendar转换为Date
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
4.2. 将Date转换为Calendar
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateInString = "2023-09-08 10:22:56";
Date date = sdf.parse(dateInString);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
5. 比较两个日期
我们可以使用compareTo()
方法比较两个日期实例。它返回一个整数值,表示给定的日期是在另一个日期之前还是之后。
比较 date1.compareTo(date2)
将返回:
- 值等于0,即
date2
等于date1
; - 小于0的值,即
date1
在date2
之前; - 大于0的值,即
date1
在date2
之后。
Date date1 = new Date();
Date date2 = new Date();
int comparison = date1.compareTo(date2);
6. 提取年、月和日
Java程序用于分别获取日期的部分,如年、月等。
获取年、月、日期、小时等的方法已过时。如果需要获取或设置年、月、日期等,请使用java.util.Calendar
。
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
// 注意:1月是0 , 而不是 1,即月份从0开始,0~11
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
int weekOfMonth= calendar.get(Calendar.WEEK_OF_MONTH);
int hour = calendar.get(Calendar.HOUR); // 12小时制
int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY); // 24小时制
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
int millisecond= calendar.get(Calendar.MILLISECOND);