Date时间API
JDK8之前时间API
1. java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。此方法适于计算时间差。
2. java.util.Date类
表示特定的瞬间,精确到毫秒
构造器:
Date():使用无参构造器创建的对象可以获取本地当前时间。
Date(long date)
常用方法
getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
@Test public void test1(){ System.out.println(System.currentTimeMillis()); //构造器一: Date(): 创建一个对应当前时间的Date对象 Date date1 = new Date(); System.out.println(date1.toString());//Sat Feb 16 16:35:31 GMT+08:00 2019 System.out.println(date1.getTime());//155030620414 //构造器二: 创建指定毫秒数的Date对象 Date date2 = new Date(15503962041L); System.out.println(date2.toString()); //创建java.sgL.Date对象 java.sql.Date date3 = new java.sql.Date(35235325345L); System.out.println(date3);//1971-02-13 //如何将java.util.Date对象转换为java.sgl.Date对象 //情况一: Date date4 = new java.sql.Date(2343243242323L); java.sql.Date date5 = (java.sql.Date) date4; //情况二: Date date6 = new Date(); java.sql.Date date7 = new java.sql.Date(date6.getTime()); }
3. java.text.SimpleDateFormat类
Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
它允许进行格式化:日期--文本、解析:文本--日期
格式化:
SimpleDateFormat() :默认的模式和语言环境创建对象
public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
public String format(Date date):方法格式化时间对象date
解析:
public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。
@Test public void test2() throws ParseException { //实例化simpLeDateFormat SimpleDateFormat sdf = new SimpleDateFormat(); //格式化: 日期 --->字符串 Date date = new Date(); System.out.println(date);//Sat Jan 14 22:21:56 CST 2023 String format = sdf.format(date); System.out.println(format);//23-1-14 下午10:21 //解析:格式化的逆过程,字串 ---> 日期 String str ="19-12-18 上午11:43"; Date date1 = null; date1 = sdf.parse(str); System.out.println(date1);//Wed Dec 18 11:43:00 CST 2019 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date2 = new Date(); String format1 = sdf1.format(date2); System.out.println(format1);//2023-01-14 10:27:40 //解析: 要求字符串必须是符SimpleDateFormat 识别的格式(通过构造器参数体现),否则,抛异常 Date date3 = sdf1.parse("2023-01-14 10:27:40"); System.out.println(date3);//Sat Jan 14 10:27:40 CST 2023 }
4. java.util.Calendar(日历)类
Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
获取Calendar实例的方法
使用Calendar.getInstance()方法
调用它的子类GregorianCalendar的构造器。
一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND
public void set(int field,int value)
public void add(int field,int amount)
public final Date getTime()
public final void setTime(Date date)
注意:
获取月份时:一月是0,二月是1,以此类推,12月是11
获取星期时:周日是1,周二是2 , 。。。。周六是7
@Test public void test3(){ //1.实例化 // 方式一:创建其子类 (GregorianCalendar) 的对象 // 方式二: 调用其静态方法getInstance() Calendar calendar = Calendar.getInstance(); System.out.println(calendar.getClass());//class java.util.GregorianCalendar //2.常用方法 // get() int days = calendar.get(Calendar.DAY_OF_MONTH);//获取当天为当月的第几天 System.out.println(days);//14 //set() calendar.set(Calendar.DAY_OF_MONTH,22);//设置当天为当月的第几天 days = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(days);//22 //add() calendar.add(Calendar .DAY_OF_MONTH, -3); days = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(days);//19 }
JDK8中新日期时间API
java.time – 包含值对象的基础包
java.time.chrono – 提供对不同的日历系统的访问
java.time.format – 格式化和解析时间和日期
java.time.temporal – 包括底层框架和扩展特性
java.time.zone – 包含时区支持的类
LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
LocalTime表示一个时间,而不是日期。
LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
部分方法:
now() / * now(ZoneId zone):静态方法,根据当前时间创建对象/指定时区的对象
of():静态方法,根据指定日期/时间创建对象
getDayOfMonth()/getDayOfYear():获得月份天数(1-31) /获得年份天数(1-366)
getDayOfWeek():获得星期几(返回一个 DayOfWeek 枚举值)
getMonth():获得月份, 返回一个 Month 枚举值
getMonthValue() / getYear():获得月份(1-12) /获得年份
getHour()/getMinute()/getSecond():获得当前对象对应的小时、分钟、秒
withDayOfMonth()/withDayOfYear()/withMonth()/withYear():将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
plusDays(), plusWeeks(),plusMonths(), plusYears(),plusHours():向当前对象添加几天、几周、几个月、几年、几小时
minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours():从当前对象减去几月、几周、几天、几年、几小时
@Test public void test4(){ //now(): 获当前的日期、时间、日期+时间 LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDate);//2023-01-14 System.out.println(localTime);//23:05:12.191 System.out.println(localDateTime);//2023-01-14T23:05:12.191 //of(): 设置指定的年、月、日、时、分、秒。没有偏移量 LocalDateTime localDateTime1 = LocalDateTime.of(2023,1,14,23,4,20); System.out.println(localDateTime1);//2023-01-14T23:04:20 //getxxx() System.out.println(localDateTime.getDayOfMonth());//14 System.out.println(localDateTime.getDayOfWeek());//SATURDAY System.out.println(localDateTime.getMonth());//JANUARY System.out.println(localDateTime.getMonthValue());//1 System.out.println(localDateTime.getMinute());//7 }
瞬时:Instant(类似于java.util.Date类)
部分方法:
now():静态方法,返回默认UTC时区的Instant类的对象
ofEpochMilli(long epochMilli):静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象
atOffset(ZoneOffset offset):结合即时的偏移来创建一个 OffsetDateTime
toEpochMilli():返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
@Test public void test5(){ //now(): 获取本初子午线对应的标准时间 Instant instant = Instant.now(); System.out.println(instant);//2023-01-14T15:22:36.121Z //添加时间的偏移量 OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); System.out.println(offsetDateTime);//2023-01-14T23:22:36.121+08:00 //toEpochMiLLi(): 获取自1970年1月1 日分秒 (UTC)开始的毫秒数-> Date类的getTime() long milli = instant.toEpochMilli(); System.out.println(milli);//1673709756121 //ofEpochMilli():通过给定的毫秒数,获取Instant实例 -->Date(Long milLis) Instant instant1 = Instant.ofEpochMilli(1673709756121L); System.out.println(instant1);//2023-01-14T15:22:36.121Z }
格式化与解析日期或时间 java.time.format.DateTimeFormatter 类
预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
部分方法:
ofPattern(String pattern):静态方法 , 返 回 一 个 指 定 字 符 串 格 式 的DateTimeFormatter
format(TemporalAccessor t):格式化一个日期、时间,返回字符串
parse(CharSequence text):将指定格式的字符序列解析为一个日期、时间
@Test public void test6(){ //重点:方式三:自定义的格式。如: ofPattern("yyyy-MM-dd hh:mm: ss") DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); //格式化 String str4 = formatter3.format(LocalDateTime.now( )); System.out.println(str4);//2023-01-14 11:44:15 //解析 TemporalAccessor accessor = formatter3.parse("2023-01-14 11:44:15"); System.out.println(accessor);//{HourOfAmPm=11, MinuteOfHour=44, SecondOfMinute=15, NanoOfSecond=0, MilliOfSecond=0, MicroOfSecond=0},ISO resolved to 2023-01-14 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)