当前位置: 首页 > news >正文

04_使用API_日期和时间

JDK 8 之前传统的日期、时间

Date 类
  • 代表的是日期和时间
import java.util.Date;public class Test {public static void main(String[] args) {// 1. 创建一个Data对象,代表系统当前时间信息的Date d = new Date();System.out.println(d);  // 输出的是日期与当前的时间信息// 2. 拿到时间毫秒值long time = d.getTime();System.out.println(time);  // 输出毫秒值// 3. 把时间毫秒值转换成对象日期:2s之后的时间是多少time += 2 * 1000;  // 2 ms * 1000 == 2sDate d2 = new Date(time);// 4. 直接把日期对象的时间,通过setTime方法进行修改Date d3 = new Date();d3.setTime(time);System.out.println(d3);}
}
SimpleDateFormat 类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test {public static void main(String[] args) throws ParseException {// 1. 准备一些时间Date d = new Date();System.out.println(d);  // 日期+时间long time = d.getTime();System.out.println(time);  // 时间毫秒值// 2. 格式化日期对象,和时间毫秒值SimpleDateFormat obj = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String res = obj.format(d);String res2 = obj.format(time);System.out.println(res);System.out.println(res2);// 3. 常见时间格式/**   y   年*   M   月*   d   日*   H   时*   m   分*   s   秒*   EEE 星期几*   a   上午/下午* */// 4. 将已被格式化的时间字符串,转变回原来的时间对象String dateStr = "2023--15-20 15:35:21";SimpleDateFormat obj2 = new SimpleDateFormat("yyyy--MM-dd HH:mm:ss");Date d2 = obj2.parse(dateStr);System.out.println(d2);  // 日期+时间}
}
Calendar 类
  • Calendar 代表的是系统此刻时间对应的日历
  • 通过它可以单独获取、修改时间中的年、月、日、时、分、秒等
import java.util.Calendar;
import java.util.Date;public class Test {public static void main(String[] args) {// 1. 得到系统此刻时间对应的日历对象Calendar obj = Calendar.getInstance();System.out.println(obj);// 2. 获取日历中的某个信息int year = obj.get(Calendar.YEAR);System.out.println(year);  // 输出年份int days = obj.get(Calendar.DAY_OF_YEAR);System.out.println(days);  // 一年365天中的第x天// 3. 拿到日历中记录的日期对象Date d = obj.getTime();System.out.println(d);// 4. 拿到时间毫秒值long time = obj.getTimeInMillis();System.out.println(time);// 5. 修改日历中的某个信息obj.set(Calendar.MONTH, 9);  // 月份是从0开始计算,所以这里是修改为10月System.out.println(obj.get(Calendar.MONTH));  // 9obj.set(Calendar.DAY_OF_YEAR, 250);  // 修改为一年中的第250天System.out.println(obj.get(Calendar.DAY_OF_YEAR));  // 250// 6. 为某个信息增加或者减少多少obj.add(Calendar.DAY_OF_YEAR, 100);obj.add(Calendar.DAY_OF_YEAR, -100);System.out.println(obj.get(Calendar.DAY_OF_YEAR));  // 250}
}

JDK 8 开始新增的日期、时间

它们的优点
  • 设计更合理,功能丰富,使用更方便
  • 都是不可变对象,修改后会返回新的时间对象,不会丢失最开始的时间
  • 线程安全
  • 能精确到毫秒、纳秒
LocalDate、LocalTime、LocalDateTime
  • LocalDate:代表本地日期(年、月、日、星期)
  • LocalTime:代表本地时间(时、分、秒、纳秒)
  • LocalDateTime:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)
// LocalDateimport java.time.LocalDate;public class Test {public static void main(String[] args) {// 1. 获取本地日期对象(不可变对象)LocalDate date = LocalDate.now();System.out.println(date);  // 2023-11-24// 2. 获取日期对象中的信息int year = date.getYear();int month = date.getMonthValue();int day = date.getDayOfMonth();int dayOfYear = date.getDayOfYear();  // 一年365天中的第几天int dayOfWeek = date.getDayOfWeek().getValue();  // 星期几// 3. 修改信息(本质不是修改原来的,而是新建了一个对象)LocalDate newDate = date.withYear(2050);System.out.println(date);  // 2023-11-24System.out.println(newDate);  // 2050-11-24// 4. 把某个信息加(或者减)多少(本质不是修改原来的,而是新建了一个对象)LocalDate date1 = date.plusYears(10);LocalDate date2 = date.minusYears(10);// 5. 指定日期的LocalDate对象LocalDate date3 = LocalDate.of(2035, 10, 1);// 6. 判断2个日期对象,是否相等,在前还是在后System.out.println(date1.equals(date2));  // falseSystem.out.println(date1.isAfter(date2));  // trueSystem.out.println(date1.isBefore(date2));  // false}
}
// LocalTimeimport java.time.LocalTime;public class Test {public static void main(String[] args) {// 1. 获取本地时间对象(不可变对象)LocalTime time = LocalTime.now();System.out.println(time);  // 23:56:28.720309500// 2. 获取时间对象中的信息int hour = time.getHour();int minute = time.getMinute();int second = time.getSecond();int nano = time.getNano();  // 纳秒// 3. 修改信息(本质不是修改原来的,而是新建了一个对象)LocalTime time1 = time.withHour(8);// 4. 把某个信息加(或者减)多少(本质不是修改原来的,而是新建了一个对象)LocalTime time2 = time.plusHours(8);LocalTime time3 = time.minusHours(8);// 5. 指定时间的LocalTime对象LocalTime time4 = LocalTime.of(12, 15);// 6. 判断2个时间对象,是否相等,在前还是在后System.out.println(time1.equals(time2));System.out.println(time1.isAfter(time2));System.out.println(time1.isBefore(time2));}
}
// LocalDateTimeimport java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;public class Test {public static void main(String[] args) {LocalDateTime dateTime = LocalDateTime.now();System.out.println(dateTime);  // 2023-11-25T10:08:23.410530300// 1. 可以获取日期和时间的全部信息int year = dateTime.getYear();int month = dateTime.getMonthValue();int day = dateTime.getDayOfMonth();int dayOfYear = dateTime.getDayOfYear();int dayOfWeek = dateTime.getDayOfWeek().getValue();int hour = dateTime.getHour();int minute = dateTime.getMinute();int second = dateTime.getSecond();int nano = dateTime.getNano();// 2. 修改时间LocalDateTime dateTime1 = dateTime.withYear(2035);// 3. 加减LocalDateTime dateTime2 = dateTime.plusYears(5);LocalDateTime dateTime3 = dateTime.minusYears(5);// 4. 获取指定日期和时间的LocalDateTime对象LocalDateTime dateTime4 = LocalDateTime.of(2055, 6, 1, 12, 30, 15, 3000);System.out.println(dateTime4);  // 2055-06-01T12:30:15.000003// 5. 判断日期时间对象是否相等,在前还是在后System.out.println(dateTime1.equals(dateTime2));System.out.println(dateTime1.isAfter(dateTime2));System.out.println(dateTime1.isBefore(dateTime2));// 6. 可以把LocalDateTime对象,转为LocalDate和LocalTimeLocalDate date = dateTime.toLocalDate();LocalTime time = dateTime.toLocalTime();System.out.println(date);  // 2023-11-25System.out.println(time);  // 10:20:04.680774700}
}
时区
import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;public class Test {public static void main(String[] args) {// 1. 获取系统默认的时区ZoneId obj = ZoneId.systemDefault();System.out.println(obj);  // GMT+08:00System.out.println(obj.getId());  // GMT+08:00// 2. 显示 Java 支持的全部时区 IdSystem.out.println(ZoneId.getAvailableZoneIds());  // [Asia/Aden, America/Cuiaba, Etc/GMT+9, Etc/GMT+8, Africa/Nairobi......]// 3. 把某个时区的id封装成ZoneId对象ZoneId obj1 = ZoneId.of("America/Cuiaba");// 4. 获取某个时区的ZonedDatetime对象ZonedDateTime obj2 = ZonedDateTime.now(obj1);System.out.println(obj2);  // 输出 America/Cuiaba 时区当前的时间,如下所示// 2023-11-24T22:50:05.534176500-04:00[America/Cuiaba]// 5. 获取世界标准时间ZonedDateTime obj3 =  ZonedDateTime.now(Clock.systemUTC());System.out.println(obj3);  // 2023-11-25T02:54:06.575812300Z// 6. 获取系统默认时区的ZonedDateTime对象ZonedDateTime obj4 = ZonedDateTime.now();System.out.println(obj4);  // 2023-11-25T10:55:46.410093200+08:00[GMT+08:00]}
}
Instant (时刻/时间戳)
  • 传统的 Date 类只能精确到毫秒,并且是可变对象
  • 新增的 Instant 类可以精确到纳秒,并且是不可变对象(推荐使用 Instant 替代 Date )
import java.time.Instant;public class Test {public static void main(String[] args) {// 1. 创建 Instant 的对象,获取此"刻"信息(该信息由两部分组成:"总秒数" + "不够1秒的纳秒数")Instant obj = Instant.now();System.out.println(obj);  // 2023-11-25T03:05:00.754167800Z// 2. 获取总秒数long second = obj.getEpochSecond();System.out.println(second);// 3. 获取纳秒数int nano = obj.getNano();System.out.println(nano);// 4. 其他基本操作,类比之前的方法,它们的方法有共通性,而且都是不可变对象Instant instant1 = Instant.now();Instant instant2 = Instant.now();System.out.println(instant1.equals(instant2));  // 判断是否相等System.out.println(instant1.isAfter(instant2));System.out.println(instant1.isBefore(instant2));Instant instant3 = instant1.plusSeconds(5);  // +5 秒Instant instant4 = instant1.minusSeconds(5);  // -5 秒}
}
DateTimeFormatter (日期时间格式化器)
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class Test {public static void main(String[] args) {// 1. 创建一个日期时间格式化器对象DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");// 2. 对时间进行格式化// 2.0 准备一个时间LocalDateTime dateTime = LocalDateTime.now();  // 创建日期时间对象System.out.println(dateTime);  // 输出该对象 2023-11-25T11:24:22.524304100// 2.1 方法一String str1 = formatter.format(dateTime);  // 格式化这个日期时间对象System.out.println(str1);  // 输出格式化后的结果 2023年11月25日 11:24:22// 2.2 方法二String str2 = dateTime.format(formatter);System.out.println(str2);  // 2023年11月25日 11:24:22// 4. 解析时间:一般使用 LocalDateTime 提供的解析方法来解析String str = "2023年11月25日 11:25:25";LocalDateTime obj = LocalDateTime.parse(str, formatter);System.out.println(obj);  // 2023-11-25T11:25:25}
}
Period(一段时期)

用于计算两个 LocalDate 对象相差的年数、月数、天数

import java.time.LocalDate;
import java.time.Period;public class Test {public static void main(String[] args) {LocalDate start = LocalDate.of(2030, 8, 6);LocalDate end = LocalDate.of(2030, 8, 20);// 1. 创建 Period 对象,封装两个日期对象Period obj = Period.between(start, end);// 2. 通过 Period 对象获取两个日期对象相差的信息System.out.println(obj.getYears());  // 0System.out.println(obj.getMonths());  // 0System.out.println(obj.getDays());  // 14}
}
Duration(持续时间)

用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数;支持 LocalTime、LocalDateTime、Instant 等时间

import java.time.Duration;
import java.time.LocalDateTime;public class Test {public static void main(String[] args) {LocalDateTime start = LocalDateTime.of(2028, 5, 10, 12, 15, 30);LocalDateTime end = LocalDateTime.of(2028, 5, 25, 8, 0, 0);// 1. 得到 Duration 对象Duration obj = Duration.between(start, end);// 2. 获取两个时间对象间隔的信息System.out.println(obj.toDays());  // 间隔多少天System.out.println(obj.toHours());  // 间隔多少小时System.out.println(obj.toMinutes());  // 间隔多少分System.out.println(obj.toSeconds());  // 间隔多少秒System.out.println(obj.toMillis());  // 间隔多少毫秒System.out.println(obj.toNanos());  // 间隔多少纳秒}
}
http://www.lryc.cn/news/242814.html

相关文章:

  • 手动实现 git 的 git diff 功能
  • RabbitMQ之MQ的可靠性
  • Navicat 技术指引 | 适用于 GaussDB 的查询编辑器
  • Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署
  • (2023码蹄杯)省赛(初赛)第三场真题(原题)(题解+AC代码)
  • 第十二章 : Spring Boot 日志框架详解
  • STM32 -Bin/Hex文件格式解析
  • 【Java 进阶篇】Redis:打开缓存之门
  • Python与设计模式--享元模式
  • 亚马逊云科技向量数据库助力生成式AI成功落地实践探秘(二)
  • 怎么当代课老师教学生
  • 『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询
  • Vue中mvvm的作用
  • 基于springboot实现高校食堂移动预约点餐系统【项目源码】
  • 用element ui上传带参数的文件,并用flask接收
  • [Android]使用Git将项目提交到GitHub
  • python cv2.imread()和Image.open()的区别和联系
  • hdlbits系列verilog解答(exams/m2014_q4i)-45
  • flink源码分析之功能组件(二)-kubeclient
  • 无需API开发,有赞小程序集成广告推广系统,提升品牌曝光
  • CMD - ping
  • 数据结构与算法编程题23
  • 小程序中的大道理之二--抽象与封装
  • 基于卷积神经网络CNN开发构建HAR人类行为识别Human Activity Recognition【完整代码实践】
  • excel自己记录
  • vcsa6.7 5480无法登录
  • CSS 属性列表
  • 浅谈能源智能管理系统在大学高校中的应用
  • 脚本自动化定制开发:实现高效工作的魔法钥匙
  • 使用websocket获取thingsboard设备的实时数据