26.日期与时间(1)旧API

Java标准库有两套处理日期和时间的API

  • 一套定义在java.util这个包里面,主要包括DateCalendarTimeZone这几个类;
  • 一套新的API是在Java 8引入的,定义在java.time这个包里面,主要包括LocalDateTimeZonedDateTimeZoneId等。

此文档为旧的API

Date

避免使用已废弃的Date类:java.util.DateSimpleDateFormat不是线程安全的,且设计存在缺陷,它总是以当前计算机系统的默认时区为基础进行输出,也很难对日期和时间进行加减。

java.util.Date是用于表示一个日期和时间的对象。

Date date = new Date();
System.out.println(date);// 获取日期: Mon Jun 30 13:38:52 CST 2025
System.out.println(date.getTime());// 获取毫秒时间都戳:1751261932664
SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置输出格式
System.out.println(formate.format(date));// 2025-06-30 13:46:32

System.out.println(date.getYear()+1900);//获取年份(必须+1900):2025
System.out.println(date.getMonth()+1);// 获取月份(0-11,必须+1):6
System.out.println(date.getDate());// 获取日(1-31):30
System.out.println(date.toGMTString());// 转为GMT时区 30 Jun 2025 05:46:32 GMT
System.out.println(date.toLocaleString());// 转为本地时区:2025年6月30日 13:46:32

Calendar

Calendar可以用于获取并设置年、月、日、时、分、秒,它和Date比,主要多了一个可以做简单的日期和时间运算的功能。

Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(dateFormat.format(calendar.getTime()));//2025-06-30 14:12:27
System.out.println(calendar.get(Calendar.YEAR));// 获取年份:2025
System.out.println(calendar.get(Calendar.MONTH)+1);// 获取月份(需要+1):6
System.out.println(calendar.get(Calendar.WEEK_OF_MONTH));//获取当前月的第几周:6
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));// 获取日:30
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));// 获取小时:14
System.out.println(calendar.get(Calendar.MINUTE));// 获取分钟:12
System.out.println(calendar.get(Calendar.SECOND));// 获取秒:27

设置成特定的一个日期和时间:

必须先清除所有字段:clear()

Calendar calendar = Calendar.getInstance();
calendar.clear();
// 设置为:2000-01-01 00:00:00
calendar.set(Calendar.YEAR, 2000);
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.WEEK_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(dateFormat.format(calendar.getTime()));//2000-01-01 00:00:00

//获取昨天日期,月份年份等同理
Calendar calendar1 = Calendar.getInstance();
System.out.println(dateFormat.format(calendar1.getTime()));// 2025-06-30 14:20:04
calendar1.add(Calendar.DAY_OF_MONTH, -1);
System.out.println(dateFormat.format(calendar1.getTime()));// 2025-06-29 14:20:04

TimeZone

CalendarDate相比,它提供了时区转换的功能。时区用TimeZone对象表示:

本质上时区转换只能通过SimpleDateFormat在显示的时候完成。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("America/New_York"));
//Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
System.out.println(calendar.getTimeZone());// sun.util.calendar.ZoneInfo[id="America/New_York"...]]
dateFormat.setTimeZone(calendar.getTimeZone());// 也可以直接指定dateFormat.setTimeZone("America/New_York")
System.out.println(dateFormat.format(calendar.getTime()));// 2025-06-30 02:34:27
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容