java.util.Date类
表示特定的时间瞬间,包含年,月,日,时,分,秒,毫秒。
时间日期的格式化和解析
格式化将Date对象转换成字符串。
解析将字符串转换成Date对象。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss.SSS");
// 格式化, Date->String
Date now = new Date();
String str = sdf.format(now);
System.out.println(str);
// 解析
String str1 = "2001年10月24日 23:15:18.123";
try {
Date date = sdf.parse(str1);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
日期和时间的格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:
字母 描述 示例
G 纪元标记 AD
y 四位年份 2001
M 月份 July or 07
d 一个月的日期 10
h A.M./P.M. (1~12)格式小时 12
H 一天中的小时 (0~23) 22
m 分钟数 30
s 秒数 55
S 毫秒数 234
E 星期几 Tuesday
D 一年中的日子 360
F 一个月中第几周的周几 2 (second Wed. in July)
w 一年中第几周 40
W 一个月中第几周 1
a A.M./P.M. 标记 PM
k 一天中的小时(1~24) 24
K A.M./P.M. (0~11)格式小时 10
z 时区 Eastern Standard Time
详细请查询(95条消息) Java——日期时间(SimpleDateFormat)_钢铁大侠.的博客-CSDN博客
使用printf格式化日期
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
// 初始化 Date 对象
Date date = new Date();
//c的使用
System.out.printf("全部日期和时间信息:%tc%n",date);
//f的使用
System.out.printf("年-月-日格式:%tF%n",date);
//d的使用
System.out.printf("月/日/年格式:%tD%n",date);
//r的使用
System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
//t的使用
System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
//R的使用
System.out.printf("HH:MM格式(24时制):%tR",date);
}
}
java.util.Calendar类
java.sql.Date类
继承自java.util.Date。为了应对数据库中的Date类型。
只用来表示年月日,不用来表示时分秒。
这是因为数据库中,date类型只用来表示年月日,time类型用来表示时分秒,datetime表示年月日时分秒。
java.sql.Timestamp类
继承自java.util.Date。为了应对数据库中的Date类型。
与数据库中的timestamp类型对应,精确到纳秒。
JDK8新的日期时间类
LocalDate类
表示年月日。
// 当前日期
LocalDate now = LocalDate.now();
// 指定日期
LocalDate date = LocalDate.of(2000, 10, 10);
LocalTime类
表示时分秒,精确到纳秒。
// 当前时间
LocalTime now = LocalTime.now();
// 指定时间,时分秒
LocalTime date = LocalTime.of(20, 10, 10);
// 指定时间,时分秒纳秒
LocalTime date = LocalTime.of(20, 10, 10, 10);
LocalDateTime类
表示年月日,时分秒,精确到纳秒。
// 当前时间
LocalDateTime now = LocalDateTime.now();
// 指定时间
LocalDateTime date = LocalDateTime.of(2000, 10, 10, 10, 10);
// 常用方法 -- 获取时间
date.getYear(); // 获取年份
date.getMonth(); // 获取月份,从0开始
date.getMonthValue(); // 获取月份,从1开始
date.getDayOfMonth(); // 获取一月第几天
date.getDayOfWeek(); // 获取一周第几天
date.getDayOfYear(); // 获取一年第几天
date.getHour(); // 获取时
date.getMinute(); // 获取分
date.getSecond(); // 获取秒
date.getNano(); // 获取纳秒
// 常用设置
date.withYear(2000); // 设置年份
date.withMonth(3); // 设置月份,从0开始
date.withDayOfMonth(4); // 设置一月第几天
date.withDayOfYear(5); // 设置一年第几天
date.withHour(6); // 设置时
date.withMinute(7); // 设置分
date.withSecond(8); // 设置秒
date.withNano(9); // 设置纳秒
// 计算
date.minusDays(10); // 减10天
date.plusDays(10); // 加10天
ZonedDateTime类
表示带有时区的时间。
// 当前时间
ZonedDateTime now = ZonedDateTime.now();
// 指定时间
ZonedDateTime date = ZonedDateTime.of(2000, 10, 10, 10, 10,10, 10, ZoneId.of("Asia/Shanghai"));
DateTimeFormatter类
时间日期格式化器,负责时间日期与字符串之间的相互转换。
// 转换器
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss.SSS");
LocalDateTime now = LocalDateTime.now();
// 时间格式化字符串
System.out.println(now.format(dtf));
// 字符串解析为时间
LocalDateTime date = LocalDateTime.parse("1999年10月10日 10:10:10.100", dtf);