Java13常用类3:Date类

4. Date类1:jdk1.8 之前

jdk1.8 之前的API:

  1. System类的currentTimeMillis():获取当前系统时间
  2. 两个Date类:
  • SimpleDateFormate类:用于格式化、解析
  • Calendar日历类的使用:抽象类

4.1 两个Date类

时间戳:指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起到此刻的总秒数。

1)System类的currentTimeMillis():

  1. 获取当前时间对应的毫秒数,Long类型,时间戳;
  2. 毫秒数:指获取1970年1月1日 0时0分0秒,到现在的毫秒数
  3. 作用常用来作为时间差

2)两个Date类
|--java.util.Date

  1. 两个构造器:①无参构造;②long类型 有参构造
  2. 两个方法:①toString(); ②long getTime();
    |----java.sql.Date:对应数据库中的 date类型
  3. 一个构造器:①long类型 有参构造
  4. 两个方法:①toString(); ②long getTime();
package com.lCommonClasses.eDateAndDateFormate;import java.util.Date;
/** Date:日期类* 1.|--java.util.Date* 2.|---java.sql.Date*/
public class Date1 {public static void main(String[] args) {/** 一、 java.util.Date* 构造器:一个有参构造器;一个无参构造器*///1.创建一个当前时间的Date对象Date date = new Date();//创建一个指定时间戳的Date实例;Sun Sep 15 13:26:28 CST 2013Date datePoint = new Date(1379222788828L);System.out.println(datePoint.toString());/*2.date: 当前系统时间date.getTime():获取1970年到现在的毫秒数*/System.out.println(date);System.out.println(date.getTime());/** 二、 java.sql.Date* 构造器:只有一个带参的构造器*/// 1.只有年-月-日: 2023-03-19java.sql.Date date2 = new java.sql.Date(System.currentTimeMillis());System.out.println(date2.toString());// 结果,2023-03-19System.out.println(date2.getTime());// 结果,1679629191418// 2.将字符串转化为日期String t = "2019-8-20";java.sql.Date date3 = java.sql.Date.valueOf(t);System.out.println(date3.getClass());// 结果,class java.sql.Date}
}

4.2 SimpeDateFormat

  • java.text.SimpeDateFormat 类:是一个不与语言环境有关的方式来格式化和解析日期的具体的类
  • 可以格式化:日期 --> 文本
  • 可以解析:文本 --> 日期
  • 构造器:
    – SimpeDateFormat(): 默认的模式 和语言环境创建对象
    – public SimpeDateFormat(String pattern): 该构造方法可以用参数 pattern指定的格式创建一个对象
  • 格式化: 日期 --> 字符串
    – public String format(Date date): 该方法可以 格式化时间对象
  • 解析: 字符串 --> 日期
    – public Date parse(String source): 从给定字符串的开始解析文本,以生成一个日期
    /*** 默认格式* @throws ParseException 解析异常*/@Testpublic void test1() throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat();Date date = new Date();/* 1.`格式化: ` 日期 --> 字符串*/String strDate = sdf.format(date);System.out.println(strDate);//23-3-24 下午12:14/* 2.`解析: ` 字符串 --> 日期注意格式的书写,抛出解析异常:ParseException需要解析的字符串的格式,需要和默认格式保持一致*/Date date2 = sdf.parse("23-3-24 下午12:14");System.out.println(date2);//Fri Mar 24 12:14:00 CST 2023}

4.2.1 日期和时间模式

以下示例显示如何在美国区域设置中解释日期和时间模式。给定的日期和时间是美国太平洋时区的 2001-07-04 12:08:56 当地时间。我们可以进行自定义,比如:SimpeDateFormat (yyyy-MM-dd HH:mm:ss)

Date and Time PatternResult
"yyyy.MM.dd HH:mm:ss "2001.07.04 12:08:56
“yyyy.MM.dd G ‘at’ HH:mm:ss z”2001.07.04 AD at 12:08:56 PDT
“EEE, MMM d, ''yy”Wed, Jul 4, '01
“h:mm a”12:08 PM
“hh ‘o’‘clock’ a, zzzz”12 o’clock PM, Pacific Daylight Time
“K:mm a, z”0:08 PM, PDT
“yyyyy.MMMMM.dd GGG hh:mm aaa”02001.July.04 AD 12:08 PM
“EEE, d MMM yyyy HH:mm:ss Z”Wed, 4 Jul 2001 12:08:56 -0700
“yyMMddHHmmssZ”010704120856-0700
“yyyy-MM-dd’T’HH:mm:ss.SSSZ”2001-07-04T12:08:56.235-0700
“yyyy-MM-dd’T’HH:mm:ss.SSSXXX”2001-07-04T12:08:56.235-07:00
“YYYY-'W’ww-u”2001-W27-3

4.2.2 日期 字母含义

定义了以下模式字母(保留从“A”到“Z”和从“a”到“z”的所有其他字符):

LetterDate or Time ComponentPresentationExamples
GEra designatorTextAD
yYearYear1996; 96
YWeek yearYear2009; 09
MMonth in year (context sensitive)MonthJuly; Jul; 07
LMonth in year (standalone form)MonthJuly; Jul; 07
wWeek in yearNumber27
WWeek in monthNumber2
DDay in yearNumber189
dDay in monthNumber10
FDay of week in monthNumber2
EDay name in weekTextTuesday; Tue
uDay number of week (1 = Monday, …, 7 = Sunday)Number1
aAm/pm markerTextPM
HHour in day (0-23)Number0
kHour in day (1-24)Number24
KHour in am/pm (0-11)Number0
hHour in am/pm (1-12)、Number12
mMinute in hourNumber30
sSecond in minuteNumber55
SMillisecondNumber978
zTime zoneGeneral time zonePacific Standard Time; PST; GMT-08:00
ZTime zoneRFC 822 time zone-0800
XTime zoneISO 8601 time zone-08; -0800; -08:00

4.3 java.util.Calender 日历类(建议使用)

1)Date类的 API大部分被废弃了,替换为Calender

2)Calendar类是一个抽象类,主要用来完成日期字段之间相互操作的功能;

4.3.1 获取实例和常用方法

3) 获取Calendar实例的方法: Calendar.getInstance()方法

4)常用方法:

  1. get(int field)
  2. set(int field, int amount)
  3. add(int field, int amount)
  4. getTime(): Calendar -->Date
  5. setTime(); 使用指定 Date重置 Calendar
package com.lCommonClasses.eDateAndDateFormate;
import org.junit.Test;
import java.util.*;
/*** Calendar 日历类:也是一个抽象类,需要new它的子类* Calendar的实例化 和常用方法*/
public class Calendar1 {@Testpublic void test1() {/**1.使用 Calendar的静态方法 getInstance()来实例化底层调用的还是实例化 Calendar的子类 GregorianCalendar*/Calendar calendar = Calendar.getInstance();// 结果,class java.util.GregorianCalendarSystem.out.println(calendar.getClass());/**2.1 get(int field) 获取年、月、日;月是从0开始的 */System.out.println(calendar.get(Calendar.MARCH) + 1);System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//获取当前月最大天数System.out.println("get(,):" + calendar.getActualMaximum(Calendar.DATE));/**2.2 set(int field, int amount) *///月份自动 +1,即实际值是:4calendar.set(Calendar.MONTH, 3);calendar.set(Calendar.DAY_OF_MONTH, 16);System.out.println(calendar.get(Calendar.MONTH));System.out.println(calendar.get(Calendar.DAY_OF_MONTH));/**2.3 add(int field, int amount) */calendar.add(Calendar.DAY_OF_MONTH, 3);calendar.add(Calendar.DAY_OF_MONTH, -5);System.out.println("add(,):" + calendar.get(Calendar.DAY_OF_MONTH));/**2.4 getTime(); Calendar -->Date */Date date = calendar.getTime();// 日期类System.out.println(date);/**2.5 setTime(); 使用指定 Date重置 Calendar */Date date1 =new Date();calendar.setTime(date1);// 日期类转日历类System.out.println(calendar.get(Calendar.MONTH));System.out.println(calendar.get(Calendar.DAY_OF_MONTH));}
}

4.3.2 常量含义意义

int field表示的意义
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期,和上面的字段意义相同
Calendar.HOUR12小时制的小时
Calendar.HOUR_OF_DAY24小时制的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK星期几

4.3.3 练习:util.Date ->sql.Date

练习1:将java.util.Date的实例转换为 java.sql.Date的实例
思路:寻找他们的相同点:时间戳

    @Testpublic void test1(){Date date1 = new Date();/* 错误实例:ClassCastExceptionjava.sql.Date date2 = (java.sql.Date) date1;System.out.println(date2);*//* 正确示例:寻找相同点(时间戳)*/java.sql.Date date2 = new java.sql.Date(date1.getTime());System.out.println(date2);// 结果,2023-03-24}

4.3.4 日期字符串 保存到数据库

拓展2:将控制台获取的年月日(比如:2022-10-01)的字符串数据,保存在数据库中。
简化:得到 java.sql.Date的对象,此对象对应的时间为:2022-10-01
分析:字符串(解析)–> java.util.Date–> java.sql.Date

    @Testpublic void test2() throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String timeStr="2022-10-01";// 将 timeStr解析为 java.util.DateDate date1 = sdf.parse(timeStr);// 转换为 java.sql.Datejava.sql.Date date2 = new java.sql.Date(date1.getTime());System.out.println(date2);// 默认的调用的是toString()方法System.out.println(date2.toString());// 结果,2022-10-01}

4.4 Jdk1.8的日期类

Date和 Calendar面临的问题:

  1. 可变性:像日期和时间这样的类应该是不可变的;
  2. 偏移性:Date中的年份是从1900开始的,而且月份是从 0开始的;
  3. 格式化:格式化只对 Date有用,Calendar则不行;
  4. 它们是线程不安全的,也不能处理闰秒。

总结:对日期和时间的操作,一直是Java程序员最痛苦的地方之一。

第三次引入的API是成功的,并且Jdk1.8引入的java.time API已经纠正了过去的缺陷,将来很长一段时间它都会为我们提供服务。

jdk1.8的日期时间API包含
在这里插入图片描述

  • java.time - 包含值对象的基础包
  • java.time.chrono - 提供对不同的日历系统的访问
  • java.time.format - 格式化和解析 时间和日期
  • java.time.temporal - 包括底层框架和扩展特性
  • java.time.zone - 包含时区支持的类
  • 常用的有基础包、format包,尽管有68个新的公开类型,但是常用的只有三分之一。
属性含义说明
Instant代表时间相当于Date
LocalDate本地日期,比如:2023-01-14
LocalTime本地时间,比如:12:20:30
LocalDateTime本地日期时间,比如:2022-01-14 12:20:30
ZonedDateTime时区,(包含时区的完整日期时间)
Duration持续时间
Period代表时间段
ZoneOffset代表时区偏移量,比如+8:00
Clock代表时钟,比如获取美国纽约的时间
DateTimeFormatter日期和字符串格式转换

4.4.1 LocalDate、LocalTime、LocalDateTime

LocalDate、LocalTime、LocalDateTime–>类似于 Calender

  1. 实例化:now()、of(xx,xx,xx)
  2. 方法:get()、withXxx()设置、plusXxx()添加、minusXxx()减去、
方法描述
static LocalDate now()静态方法,根据当前时间创建对象/ 指定时区的对象
static LocalDate of(int year, Month month, int dayOfMonth)静态方法,根据指定日期/ 时间创建对象
getDayOfMonth()/ getDayOfYear()获取 月份(1~31)里/ 一年里的某天字段(1~366) 。
getDayOfWeek()获取 星期字段,这是一个枚举。
getMonth()使用枚举获取月份字段。
getMonthValue()/ getYear()获取 从 1 到 12 的月份字段/ 获取年份字段
getHour()/ getMinute()/ getSecond()获取 当前对象对应的时、分、秒字段。
withDayOfMonth()/ withDayOfYear()/ withMonth()/ withYear()将月份天数、年份天数、月份、年份设置为指定的值,并返回新的对象
with(TemporalAdjuster adjuster)将当前日期时间设置为校对器指定的日期时间
plusHours()/ plusDays()/ plusWeeks()/ plusMonths()/ plusYears()向当前对象 添加 几个小时、几天、几周、几月、几年
minusHours()/ minusDays()/ minusWeeks()/ minusMonths()/ minusYears()从当前对象减去几个小时、几天、几周、几月、几年
plus(TemporalAmount t)/ minus(TemporalAmount t)添加或减少 一个 Duration(期间) 或Period(时期)
isBefore()/ isAfter()比较两个 LocalDate
isLeapYear()判断是否为 闰年
format(DateTimeFormatter t)格式化本地日期、时间,返回一个字符串
parse(CharSequence text)将指定格式的字符串解析为日期、时间
/** Jdk1.8的 API1. * LocalDate、LocalTime、LocalDateTime*/@Testpublic void test1(){/*1. static LocalDate now():获取当前日期和时间对应的实例 */LocalDate localDate = LocalDate.now();LocalTime localTime = LocalTime.now();LocalDateTime localDateTime = LocalDateTime.now();System.out.println(localDate);//2023-03-24System.out.println(localTime);//15:56:17.730System.out.println(localDateTime);//2023-03-24T15:56:17.730/*2. static LocalDate of(int year, Month month, int dayOfMonth):获取指定的日期、时间对应的实例*/LocalDate localDate1 = LocalDate.of(2022, 10, 01);LocalDateTime localDateTime1 = LocalDateTime.of(2021, 10, 01, 12, 25);System.out.println(localDate1);//2022-10-01System.out.println(localDateTime1);//2021-10-01T12:25}/** 1.2 getXxx() 获取;withXxx()设置;plusXxx()添加*/@Testpublic void test2(){/*1. getDayOfMonth() 获取 */LocalDateTime localDateTime1 = LocalDateTime.now();System.out.println(localDateTime1.getDayOfMonth());//24/**体现了不可变性*//*2. withDayOfMonth(int i) 设置 */LocalDateTime localDateTime2 = localDateTime1.withDayOfMonth(12);System.out.println(localDateTime1);//2023-03-24T16:57:05.096System.out.println(localDateTime2);//2023-03-12T16:57:05.096/*3. plusXxx() 添加 */LocalDateTime localDateTime3 = localDateTime1.plusDays(5);LocalDateTime localDateTime4 = localDateTime2.plusDays(-5);System.out.println(localDateTime1);//2023-03-24T17:17:07.588System.out.println(localDateTime3);//2023-03-29T17:17:07.588System.out.println(localDateTime4);//2023-03-07T17:17:07.588}

4.4.2 Instant:瞬时;类似Date

  • Instant:时间线上的一个瞬时点。这可能被用来记录应用程序中的事件时间戳。
  • java.time.Instant:时间线上的一点,而不需要任何上下文信息(例如:时区)。它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数
  • 应用场景:订单号的生成
  1. 实例化:now()、ofEpochMilli(xx, xx, xx)
  2. 方法:toEpochMilli()
方法描述
now()静态方法,返回默认UTC时区的 Instant类的对象
ofEpochMilli(long epochMilli)静态方法,返回在 “1970-01-01 00:00:00”基础上加上指定毫秒数之后的 Instant类的对象
toEpochMilli()返回从 “1970-01-01 00:00:00”到此刻的毫秒数,即为时间戳
  1. 中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚时差均为+8,也就是UTC+8
  2. instant.atOffset(ZoneOffset.ofHours(8)); 时区偏移量
/** Jdk1.8的 API2. Instant */@Testpublic void test3(){// 1.now()Instant instant1 = Instant.now();System.out.println(instant1);//2023-03-24T09:56:39.591Z//  2.了解 atOffset(ZoneOffset.ofHours(8))OffsetDateTime instant2 = instant1.atOffset(ZoneOffset.ofHours(8));System.out.println(instant2);//2023-03-24T17:56:39.591+08:00//3.ofEpochMilli(long Milli)-->类似于DateInstant instant3 = Instant.ofEpochMilli(124578986532L);System.out.println(instant3);//1973-12-12T21:16:26.532Z//4.toEpochMilli() 获取时间戳long milliTime = instant1.toEpochMilli();System.out.println(milliTime);//1679652614997long time = new Date().getTime();System.out.println(time);//1679652615103}

4.4.3 DateTimeFormatter

1)DateTimeFormatter—>类似于 SimpleDateFormate:用于日期的格式化和 解析

  1. DateTimeFormatter主要是对LocalDate、LocalTime、LocalDateTime进行格式化、解析
  2. SimpleDateFormate是对 Date进行格式化、解析

自定义的格式。如:ofPattern(“yyyy-MM-dd HH:mm:ss”)

方法描述
ofPattern(String pattern)静态方法,返回一个指定字符串格式的 DateTimeFormatter
format(localDateTime)格式化日期
parse(“2023/03/24 19:46:27”) + from(temporalAccessor)解析日期、时间字符串
/**Jdk1.8的 API3. DateTimeFormatter*/@Testpublic void test4(){//自定义格式,如:ofPattern("yyyy/MM/dd HH:mm:ss")DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");//格式化时间:日期、时间 -->字符串LocalDateTime localDateTime = LocalDateTime.now();String strDateTime = dateTimeFormatter.format(localDateTime);System.out.println(strDateTime);//2023/03/24 19:46:27//解析:字符串 -->日期、时间TemporalAccessor temporalAccessor = dateTimeFormatter.parse("2023/03/24 19:46:27");System.out.println(temporalAccessor);//{},ISO resolved to 2023-03-24T19:46:27//转化格式LocalDateTime localDateTime1 = LocalDateTime.from(temporalAccessor);System.out.println(localDateTime1);//2023-03-24T19:46:27}

4.4.4 其他API

4.1 ZoneId、ZonedDateTime(了解)

1、指定时区日期时间:ZondId、ZonedDateTime

  • ZoneId:包含了所有的时区信息,一个时区的ID
  • ZonedDateTime:一个在 ISO-8601 日历系统市区的日趋时间
    其中每个时区都对应一个ID,地区ID都为 “{区域}/{城市}” 的格式,如:Asia/Shanghai 等
  • 常见时区:

Asia/Shanghai
UTC
America/New_York

  • 可以通过 ZoneId获取所有可用的时区ID:
/*** 1. 时区相关:ZoneId、ZonedDateTime*/@Testpublic void test1(){/*需要知道一些时区ID ;Set<String>是一个集合,容器*/Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();//快捷模板for (String availableZoneId : availableZoneIds) {System.out.println(availableZoneId);}}@Testpublic void test2(){ZonedDateTime t1 = ZonedDateTime.now();System.out.println(t1);ZonedDateTime t2 = ZonedDateTime.now(ZoneId.of("America/New_York"));System.out.println(t2);}
4.2 持续日期/时间:Period和 Duration(了解)

Period: 日期间隔,用于计算两个 “日期” 间隔
Duration:持续时间,用于计算两个 “时间” 间隔

    @Testpublic void test3() {LocalDate nowTime = LocalDate.now();LocalDate oldTime = LocalDate.of(2018, 8, 15);Period between = Period.between(nowTime, oldTime);System.out.println(between);System.out.println("相差年数:" + between.getYears());// 相差年数:-4System.out.println("相差月数:" + between.getMonths());// 相差月数:-7System.out.println("相差日数:" + between.getDays());// 相差日数:-9System.out.println("相差总数:" + between.toTotalMonths());// 相差总月数:-55}@Testpublic void test4() {LocalDateTime t1 = LocalDateTime.now();LocalDateTime t2 = LocalDateTime.of(2018,10,01,0,0,0);Duration between = Duration.between(t1, t2);System.out.println(between);System.out.println("相差天数:" + between.toDays());System.out.println("相差小时数:" + between.toHours());System.out.println("相差分钟数:" + between.toMinutes());System.out.println("相差秒数:" + between.getSeconds());System.out.println("相差毫秒数:" + between.toMillis());System.out.println("相差纳秒数:" + between.toNanos());System.out.println("不够一秒的纳秒数:" + between.getNano());}
  1. Duration,用于计算两个 “时间” 间隔,以秒和纳秒为基准:
 @Testpublic void test5() {LocalTime time1 = LocalTime.now();LocalTime time2 = LocalTime.of(15, 23, 30);// between: 日期间隔,返回 Duration对象,表示两个时间的间隔Duration duration = Duration.between(time1, time2);System.out.println(duration);// 结果,PT-5H-30M-48.355SSystem.out.println(duration.getSeconds());// 结果,-19849System.out.println(duration.getNano());// 结果,645000000LocalDateTime localDateTime1 = LocalDateTime.of(2016, 6, 6, 12, 32, 30);LocalDateTime localDateTime2 = LocalDateTime.of(2017, 6, 6, 12, 32, 30);Duration duration1 = Duration.between(localDateTime1, localDateTime2);System.out.println(duration1.toDays());// 结果,365}
  1. Period,用于计算两个 “日期” 间隔,以年、月、日衡量:
    @Testpublic void test6() {LocalDate now = LocalDate.now();LocalDate date = LocalDate.of(2035, 10, 24);Period period = Period.between(now, date);System.out.println(period);// 结果,P12Y7MSystem.out.println(period.getYears());// 结果,12System.out.println(period.getMonths());// 结果,7System.out.println(period.getDays());// 结果,0Period period1 = period.withYears(2);System.out.println(period1);// 结果,P2Y7M}
4.3 Clock(了解)

Clock:使用时区提供对当前即时、日期和时间的访问的时钟

4.4 TemporalAdjuster时间校正器
  1. TemporalAdjuster,时间校正器。有时我们需要可能获取。如:将日期调整到 “下一个工作日” 等;
  2. TemporalAdjusters:该类通过静态方法(firstDayOfXxx()、lastDayOfXxx()、nextXxx())提供了大量的常用 TemporalAdjuster的实现。
package com.lCommonClasses.eDateAndDateFormate;
import org.junit.Test;
import java.time.*;
import java.time.temporal.*;
public class TimeJdk8_4 {@Testpublic void test1(){//获取当前日期的下一个周日是哪天?TemporalAdjuster temporalAdjuster = TemporalAdjusters.next(DayOfWeek.SUNDAY);LocalDateTime localDateTime = LocalDateTime.now().with(temporalAdjuster);System.out.println(localDateTime);//获取下一个工作日是哪天?LocalDate workDate = LocalDate.now().with(new TemporalAdjuster() {@Overridepublic Temporal adjustInto(Temporal temporal) {LocalDate date = (LocalDate) temporal;if (date.getDayOfWeek().equals(DayOfWeek.FRIDAY)){return date.plusDays(3);}else if (date.getDayOfWeek().equals(DayOfWeek.SATURDAY)){return date.plusDays(2);}else {return date.plusDays(1);}}});System.out.println("下一个工作日是:"+workDate);}
}

4.4.5 与传统日期处理的转换

To 遗留类From 遗留类
java.time.Instant与 java.util.DateDate.from( instant)date.toInstant()
java.time.Instant与 java.sql.TimestampTimestamp.from( instant)timestamp.toInstant()
java.time.ZonedDateTime与 java.util.GregorianCalendarGregorianCalendar.from( ZonedDateTime)cal.toZonedDateTime()
java.time.LocalDate与 java.sql.TimeDate.valueOf( localDate)date.toLocalDate()
java.time.LocalTime与 java.sql.TimeDate.valueOf( localDate)date.toLocalDate()
java.time.LocalDateTime与 java.sql.TimestampTimestamp.valueOf( localDateTime)timestamp.toLocalDateTime()
java.time.ZoneId与 java.util.TimeZoneTimezone.getTimeZone( id)timeZone.toZoneId()
java.time.format.DateTimeFormatter与 java.text.DateFormatformatter.toFormat()

4.4.6 练习题:获取百天日期

package com.lCommonClasses.eDateAndDateFormate;
import org.junit.Test;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;public class TimeInterview1 {/*** 1.使用 Calendar获取当前时间,把这个时间设置为你的生日,* 再获取你的百天(出生后第100天)日期*/@Testpublic void test1(){Calendar calendar = Calendar.getInstance();Date date = calendar.getTime();System.out.println("出生日期:" + date);calendar.add(Calendar.DAY_OF_YEAR,100);Date hundredDay = calendar.getTime();System.out.println("百天日期是:" + hundredDay);}/*** 2.使用 LocalDateTime获取当前时间,把这个时间设置为你的生日,* 再获取你的百天(出生后第100天)日期*/@Testpublic void test2(){LocalDateTime date = LocalDateTime.now();System.out.println("出生日期:" + date);LocalDateTime hundredDay = date.plusDays(100);System.out.println("百天日期是:" + hundredDay);}
}

4.5 日期互转

4.5.1 long与Date、Calendar

package com.lCommonClasses.dateAndDateFormate;import java.util.Calendar;
import java.util.Date;/** DateReversal日期互转1: long与 Date、Calendar */
public class DateReversal1 {public static void main(String[] args) {/** 1.1 long与 Date */Date date = new Date();long time = date.getTime();System.out.println(date);System.out.println(time);/** 1.2 long与Calendar */Calendar calendar = Calendar.getInstance();calendar.set(Calendar.YEAR,2021);calendar.set(Calendar.MONTH,11);calendar.set(Calendar.DAY_OF_MONTH,6);long timeInMillis = calendar.getTimeInMillis();System.out.println(calendar);System.out.println(timeInMillis);}
}

4.5.2 Date与Calendar互转

package com.lCommonClasses.dateAndDateFormate;import java.util.Calendar;
import java.util.Date;/** DateReversal日期互转2: Date与 Calendar互转 */
public class DateReversal2 {public static void main(String[] args) {/**2.1 Date转 Calendar*/Date date = new Date();Calendar calendar = Calendar.getInstance();calendar.setTime(date);// 结果,Sun Mar 19 20:36:20 CST 2023System.out.println(calendar.getTime());/** 2.1 Calendar转 Date */Calendar c = Calendar.getInstance();c.set(Calendar.YEAR,2000);//月份自动 +1,即实际值是:12c.set(Calendar.MONTH,11);c.set(Calendar.DAY_OF_MONTH,22);c.add(Calendar.DAY_OF_MONTH,2);// 结果,Sun Dec 24 21:14:33 CST 2000System.out.println(c.getTime());}
}

4.5.3 Date与String互转

package com.lCommonClasses.dateAndDateFormate;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/** DateReversal日期互转3: Date与 String互转 */
public class DateReversal3 {public static void main(String[] args) {/**3.1 Date转String*/SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");String dateStr=sdf.format(new Date());System.out.println(dateStr);// 结果,2023-03-19/**3.2 String转 Date: 注意格式必须一致*/String str="2022-11-06";SimpleDateFormat sDF= new SimpleDateFormat("yyyy-MM-dd");Date date = null;try {date = sDF.parse(str);System.out.println(date);} catch (ParseException e) {System.out.println("String转 Date错误");}}
}

4.5.4 Calendar与String互转

package com.lCommonClasses.dateAndDateFormate;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;/** DateReversal日期互转4: Calendar与 String互转 */
public class DateReversal4 {public static void main(String[] args) throws ParseException {/** 4.1 Calendar 转化成 String*/Calendar c = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str = sdf.format(c.getTime());// String str = sdf.format(new Date());System.out.println(str);/** 4.2 String (先转Date,再)转化成 Calendar*/String str1="2020-11-6";SimpleDateFormat sdf1= new SimpleDateFormat("yyyy-MM-dd");Date date =sdf1.parse(str1);c.setTime(date);System.out.println(c.getTime());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/456695.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《动手学深度学习(PyTorch版)》笔记6.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

Python循环语句——for循环的基础语法

一、引言 在Python编程的世界中&#xff0c;for循环无疑是一个强大的工具。它为我们提供了一种简洁、高效的方式来重复执行某段代码&#xff0c;从而实现各种复杂的功能。无论你是初学者还是资深开发者&#xff0c;掌握for循环的用法都是必不可少的。在本文中&#xff0c;我们…

第三百一十回

文章目录 1. 概念介绍2. 实现方法2.1 hintText2.2 labelText2.3 controller 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何在输入框中处理光标"相关的内容&#xff0c;本章回中将介绍如何添加输入框默认值.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…

【C++从0到王者】第四十一站:特殊类的设计

文章目录 一、设计一个类&#xff0c;不能被拷贝1.C98方法2.C11方法 二、设计一个类&#xff0c;只能在堆上创建对象1.析构函数私有化2.构造函数私有化 三、请设计一个类&#xff0c;只能在栈上创建对象四、设计一个类不能被继承1.C98方式2.C11方式 五、设计一个类&#xff0c;…

【JS逆向学习】今日头条

逆向目标 目标网页&#xff1a;https://www.toutiao.com/?wid1707099375036目标接口&#xff1a;https://www.toutiao.com/api/pc/list/feed目标参数&#xff1a;_signature 逆向过程 老规矩先观察网络请求&#xff0c;过滤XHR请求观察加密参数&#xff0c;发现Payload的_s…

c#cad 创建-直线(五)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 这段代码是用于在AutoCAD中创建一条直线。首先获取当前活动文档和数据库的引用&#xff0c;然后创建一个编辑器对象用于提示用户输入。接下来&#xff0c;在一个事务中获取模型空间的块表记录&#xff0c;并定义直线的长度…

图灵之旅--二叉树堆排序

目录 树型结构概念树的表示形式 二叉树概念特殊的二叉树二叉树性质二叉树的存储二叉树的遍历前中后序遍历 优先级队列(堆)概念 优先级队列的模拟实现堆的性质概念堆的存储方式堆的创建 堆常用接口介绍PriorityQueue的特性PriorityQueue常用接口介绍优先级队列的构造插入/删除/获…

没有联合和枚举 , C语言怎么能在江湖混 ?

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能…

QT:界面上重写鼠标事件(画框,鼠标更改)

前言 接上一篇的rtsp播放器&#xff0c;有需要在播放界面手动跟踪&#xff0c;就需要在播放界面绘制矩形框&#xff0c;并把当前鼠标绘制区域的宽高坐标进行换算发送给3559&#xff0c;做进一步处理。绘制矩形框共分为两种&#xff0c;第一种是左键拖动绘制&#xff0c;第二种是…

Z函数的原理和应用:以Python为例

Z函数 也就是&#xff0c;它想找前缀和以s[i]开头的后缀的LCP 思想 维护一个右端点最右的z-box 结合z[i - l]的结果和朴素算法进行优化 Z函数Python模版 def sumScores(self, s: str) -> int:n len(s)z [0] * nl r 0 # 右端点最右的z-boxfor i in range(1, n):if i &…

Etsy做什么店铺比较靠谱? 什么叫做真人店?

作为Etsy是美国最大的原创手工在线销售平台之一&#xff0c;以其店铺利润高、平台佣金低、平台同质化不严重的优点在跨境电商里颇具竞争力。然而Etsy开店却不是件容易事&#xff0c;原因是Etsy真人店对于环境以及卖家的运营操作要求较高&#xff0c;下面就给各位有意入局Etsy的…

Linux Shell编程系列--变量的定义与使用

一、目的 上一篇我们简单介绍了shell脚本的组成以及如何运行一个shell脚本&#xff0c;本篇将详解讲解shell中的变量。在Shell脚本中&#xff0c;变量是用来存储和处理数据的基本结构。 二、介绍 1、定义变量 变量名与等号&#xff08;&#xff09;后跟值来定义一个变量&#…