文章目录
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 的实现