文章目录
- java.lang.System类
- java.util.Date类
- java.sql.Date类
- java.text.SimpleDateFormat类
- java.util.Calendar(日历)类
- java.time类
- java.time.Instant类
- java.time.format.DateTimeFormatter 类
- 其它API
java.lang.System类
System类提供的public static long currentTimeMillis()
用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差(时间戳)。(此方法适于计算时间差)
long time = System.currentTimeMillis();
System.out.println(time);
java.util.Date类
构造器:
①Date()
:创建的对象可以获取本地当前时间
②Date(long date)
:创建指定毫秒数的Date对象,相当于又将时间戳转换成String形式
常用方法
①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是时间标准。
import java.util.Date;public class DataTest {public static void main(String[] args) {Date date = new Date();System.out.println(date.toString());System.out.println(date); //等同于toString()方法System.out.println(date.getTime());}
}
java.sql.Date类
是java.util.Date类的子类,对应着数据库中的日期类型的变量。
构造器:java.sql.Date(时间戳)
常用方法:同上
java.sql.Date与java.util.Date转换,可以通过多态和getTime()方法
import java.util.Date;public class DataTest {public static void main(String[] args) {Date date = new Date();java.sql.Date sqlDate = new java.sql.Date(date.getTime());System.out.println(sqlDate);}
}
java.text.SimpleDateFormat类
Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。其允许进行①格式化:日期—>字符串、②解析:字符串—>日期。
格式化:
1.实例化
①SimpleDateFormat() :默认的模式和语言环境创建对象
②SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象
2.格式化
实例化对象调用 String format(Date date)
方法格式化时间对象
import java.text.SimpleDateFormat;
import java.util.Date;public class SimpleTest {public static void main(String[] args) {SimpleDateFormat sdf = new SimpleDateFormat(); //无参默认模式实例化Date date = new Date(); String format = sdf.format(date); //格式化System.out.println(format);}
}
import java.text.SimpleDateFormat;
import java.util.Date;public class SimpleTest {public static void main(String[] args) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //带参指定格式实例化Date date = new Date();String format = sdf.format(date); //格式化System.out.println(format);}
}
关于指定格式:
解析(格式化逆过程):
Date parse(String source)
:依据格式解析字符串,以生成一个日期(注意格式的匹配对应,否则抛异常)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class SimpleTest {public static void main(String[] args) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //带参指定格式实例化Date parse = sdf.parse("2020-12-20 22:03:19");System.out.println(parse);}
}
java.util.Calendar(日历)类
这是一个抽象(abstract)类,主用用于完成日期字段之间相互操作的功能。
实例化:
①使用Calendar.getInstance()
该静态方法
②调用它的子类GregorianCalendar的构造器
常用方法:
import java.util.Calendar;
import java.util.Date;public class CalendarTest {public static void main(String[] args) {Calendar instance = Calendar.getInstance();//get():int get(int field)int ofMouth = instance.get(Calendar.DAY_OF_MONTH);System.out.println(ofMouth);int ofYear = instance.get(Calendar.DAY_OF_YEAR);System.out.println(ofYear);//set():void set(int field,int value)instance.set(Calendar.DAY_OF_MONTH,9);System.out.println(instance.get(Calendar.DAY_OF_MONTH));//add:void add(int field,int amount)instance.add(Calendar.DAY_OF_MONTH,-2);System.out.println(instance.get(Calendar.DAY_OF_MONTH));//getTime:final Date getTime() 将日历类型转换为Date类型Date time = instance.getTime();System.out.println(time);//setTime:final void setTime(Date date) 将Date类型转换为日历类型instance.setTime(new Date());System.out.println("********" + instance.getTime());}
}
一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND。
java.time类
LocalDate、LocalTime、LocalDateTime 类
是其中较重要的几个子类,它们的实例
是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。
实例化:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;public class TimeTest {public static void main(String[] args) {//now() 获取当前日期,时间,日期+时间LocalDate now1 = LocalDate.now();LocalTime now2 = LocalTime.now();LocalDateTime now3 = LocalDateTime.now();System.out.println(now1);System.out.println(now2);System.out.println(now3);//of() 设置指定的年月日时分秒,没有偏移量LocalDateTime of = LocalDateTime.of(2021, 9, 9, 15, 36, 40);System.out.println(of);}
}
其他常用方法:
import java.time.LocalDateTime;public class TimeTest {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now();//getXxx() 获取相关的属性System.out.println(now.getDayOfWeek());System.out.println(now.getMonth());System.out.println(now.getMonthValue()); //......//withXxx() 设置相关的属性,不可变性LocalDateTime nowWith = now.withDayOfMonth(8);System.out.println(nowWith);System.out.println(now);//plusXxx() 加,不可变性LocalDateTime pl = now.plusMonths(2);System.out.println(pl);//minusXxx() 减,不可变性LocalDateTime mi = now.minusDays(8);System.out.println(mi);}
}
java.time.Instant类
Instant:时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间
戳。
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;public class InstantTest {public static void main(String[] args) {//获取本初子午线当前的标准时间Instant now = Instant.now();System.out.println(now);//结合时区,添加当地时间偏移量OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));System.out.println(offsetDateTime);//返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳long l = now.toEpochMilli();System.out.println(l);//返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象Instant instant = Instant.ofEpochMilli(l);System.out.println(instant);}
}
java.time.format.DateTimeFormatter 类
该类提供了三种格式化方法:
①预定义的标准格式,如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
②本地化相关的格式,如:ofLocalizedDateTime(FormatStyle.LONG)
③自定义的格式,如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.TemporalAccessor;public class FormatterTest {public static void main(String[] args) {//方式一:预定义的标准格式DateTimeFormatter isoDateTime = DateTimeFormatter.ISO_LOCAL_DATE_TIME;//格式化String format1 = isoDateTime.format(LocalDateTime.now());System.out.println(format1);//解析TemporalAccessor parse1 = isoDateTime.parse(format1);System.out.println(parse1);//方式二:本地化相关的格式DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);//格式化String format2 = dateTimeFormatter.format(LocalDateTime.now());System.out.println(format2);//解析TemporalAccessor parse2 = dateTimeFormatter.parse(format2);System.out.println(parse2);//方式三:自定义格式DateTimeFormatter dateTimeFormatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");//格式化String format3 = dateTimeFormatter3.format(LocalDateTime.now());System.out.println(format3);//解析TemporalAccessor parse3 = dateTimeFormatter3.parse(format3);System.out.println(parse3);}
}
其它API
ZoneId:该类中包含了所有的时区信息,一个时区的ID,如 Europe/Paris
ZonedDateTime:一个在ISO-8601日历系统时区的日期时间,
如 2007-12-03T10:15:30+01:00 Europe/Paris
其中每个时区都对应着ID,地区ID都为“{区域}/{城市}”的格式,例如:
Asia/Shanghai等
Clock:使用时区提供对当前即时、日期和时间的访问的时钟
持续时间:Duration,用于计算两个“时间”间隔
日期间隔:Period,用于计算两个“日期”间隔
TemporalAdjuster : 时间校正器。有时我们可能需要获取例如:将日期调整到“下一个工作日”等操作。
TemporalAdjusters : 该类通过静态方法(firstDayOfXxx()/lastDayOfXxx()/nextXxx())提供了大量的常用TemporalAdjuster 的实现