1、只用于显示系统时间,其大部分操作由Calendar代替。 格林威治时间(GMT):指的是1970年1月1日0时,不同地区有时间差。 默认输出格式:星期、月、日、时、分、秒、时区、年
2、构造方法: (1)public Date(); //无参构造创建的对象可以获取本机的当前日期与时间。 (2)public Date(long date) ; //根据自定义时间创建Date对象。date若为正数,则表示公元后,若为负数,则表示公元前。
3、常用方法: (1)public long getTime(); //可以获取从1970年开始到现在时间的毫秒数。 (2)public void setTime(long time); //可以自定义date时间。
import java.util.Date; public class Demo { public static void main(String[] args) { Date date = new Date();// 实例化一个Date类,用于获取当前系统时间 System.out.println(date);// 输出时间,Thu May 23 14:10:49 JST 2019 System.out.println(date.getTime());// 输出毫秒值,1558588249722 date.setTime(date.getTime() + 1000);// 手动增加1000毫秒 System.out.println(date.getTime());// 输出毫秒值,1558588250722 } } @Test public void test2(){ Date d1 = new Date(); System.out.println(d1.toString()); System.out.println(d1); System.out.println(d1.getTime()); }1、java1.5版本前,使用该类作用是将字符串(String)与时间(Date)相互转换。
2、构造方法: (1)public SimpleDateFormat(); //按照系统默认格式将Date转换为String。 (2)public SimpleDateFormat(String pattern); //按照自定义格式pattern转换。
3、常用方法: (1)public final String format(Date date); //可以将Date转为String。 (2)public Date parse(String source) throws ParseException; //可以将String转为Date,使用时需要抛出异常(ParseException)。
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Demo { public static void main(String[] args) { Date date = new Date();// 实例化一个Date类,用于获取当前系统时间 System.out.println(date);// 输出时间,Thu May 23 14:36:10 JST 2019 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd E HH-mm-ss"); String str = sdf.format(date);// 按照指定格式转为字符串 System.out.println(str);// 输出转换后的时间,2019-05-23 星期四 14-36-10 try { // 将字符串转为Date,Thu May 23 14:36:10 JST 2019 System.out.println(sdf.parse(str)); } catch (ParseException e) { System.out.println("格式转换异常。"); } } } @Test public void test3() throws ParseException { //SimpleDateFDormat为对Date格式化和解析 //1.格式化 Date -> String //2.解析 String -> Date SimpleDateFormat d1 = new SimpleDateFormat(); Date date = new Date(); String s1 = d1.format(date); System.out.println(s1); String s2 = "20-7-1 上午10:19"; Date date2 = d1.parse(s2); System.out.println(date2); //指定格式格式化和解析 SimpleDateFormat d2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String s3 = d2.format(date); System.out.println(s3); Date date3 = d2.parse("2020-07-01 10:25:28"); System.out.println(date3); } @Test public void test4() throws ParseException { //2019-12-1 -> java.sql.Date //先到date然后通过date.getTime()的方法抓话为java.sql.Date SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd"); Date date = s1.parse("2019-12-1"); System.out.println(date); java.sql.Date d1 = new java.sql.Date(date.getTime()); System.out.println(d1.getTime()); } @Test public void test5() throws ParseException { SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = s1.parse("1990-01-01"); Date date2 = s1.parse("2020-09-08"); System.out.println(date1.getTime()); System.out.println((date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24 )+1); }1、Calendar类是一个抽象类,不能被实例化,可以通过静态方法getInstance()初始化一个日历对象。默认为当前系统时间。该类用于封装日历信息,并对时间分量(年、月、日、时、分、秒)进行计算。
2、常用方法: (1)public final Date getTime(); //将Calendar转为Date型。 (2)public final void setTime(Date date); //将Date型转为Calendar。 (3)public int get(int field); //用于获取时间分量。其中field使用Calendar类的静态变量表示。 (4)public void set(int field, int value); //设置时间分量,value指要设置的值。 (5)public final void set(int year, int month, int date); //设置年月日。 (6)public int getActualMaximum(int field); //获取时间分量field的最大值。 (7)abstract public void add(int field, int amount); //加时间分量,若加天数时,field需使用Calendar.DAY_OF_YEAR
增删改查: get,set,add,getTime(),setTime()
@Test public void test6(){ //Calendar日历类的使用 //get Calendar c1 = Calendar.getInstance(); int year = c1.get(Calendar.YEAR); System.out.println(year); int day = c1.get(Calendar.DAY_OF_YEAR); System.out.println(day); //set c1.set(Calendar.YEAR,1999); int year1 = c1.get(Calendar.YEAR); System.out.println(year1); //add c1.add(Calendar.YEAR,10); int year2 = c1.get(Calendar.YEAR); System.out.println(year2); //getTime() Date d1 = c1.getTime(); System.out.println(d1); //setTime() Date d2 = new Date(); c1.setTime(d2); int year3 = c1.get(Calendar.YEAR); System.out.println(year3); }(1)java.time.LocalDateTime:存储了时间与日期,格式为:年-月-日T时:分:秒.毫秒。比如:2019-05-23T12:51:36.494,可以使用withNano(0)将毫秒值设为0。 (2)java.time.LocalDate:存储了日期,格式为:年-月-日。比如:2019-05-23。 (3)java.time.LocalTime:存储了时间,格式为:时:分:秒.毫秒。比如:12:53:44.954。可以使用withNano(0)将毫秒值设为0。 (4)java.time.format.DateTimeFormatter;类似于java.text.SimpleDateFormat。但其只用来创建日期的显示模板,parse()(是一种静态方法)与format()方法需要使用LocalDateTime类来调用
其中对LocalDateTime详细分析 1、常用方法: (1)public static LocalDateTime now(); //静态方法,获取当前系统时间。 (2)public static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second) ; //静态方法,自定义时间 (3)public int getYear(); //获取年 (4)public LocalDateTime plusYears(long years); //增加年,会返回一个新的实例,若参数为负,也会出现减的效果。, (5)public LocalDateTime minusMonths(long months); //减月,会返回一个新的实例,若参数为负,会出现加的效果。 (6)public LocalDateTime withDayOfMonth(int dayOfMonth); //修改日,会返回一个新的实例。 .now/of/plus/minus/withDatOfMonth
@Test public void test1(){ //localdate,localtime,localdatetime LocalDate localdate = LocalDate.now(); LocalTime localtime = LocalTime.now(); LocalDateTime localdatetime = LocalDateTime.now(); System.out.println(localdate); System.out.println(localtime); System.out.println(localdatetime); //of,设置指定的日期 LocalDateTime localDateTime1 = LocalDateTime.of(2020,10,10,13,23,43); System.out.println(localDateTime1); //get int dayOfYear = localDateTime1.getDayOfYear(); int dayOfMonth = localDateTime1.getDayOfMonth(); Month month = localDateTime1.getMonth(); System.out.println(dayOfMonth); System.out.println(dayOfYear); System.out.println(month); //set LocalDateTime localDateTime = localDateTime1.withDayOfMonth(11); System.out.println(localDateTime); //add LocalDateTime localDateTime2 = localDateTime1.plusHours(4); System.out.println(localDateTime2); //减 LocalDateTime localDateTime3 = localDateTime1.minusHours(4); System.out.println(localDateTime3); }instant为相对于欧洲的那边的时间定的
.now/atOffset/toEpuchMilli()/ofEpochMilli()
@Test public void test2(){ //instant Instant instant = Instant.now();//按照-8小时算的 System.out.println(instant); OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); System.out.println(offsetDateTime); //获取1970到现在的毫秒数 //instant -> long long l = instant.toEpochMilli(); System.out.println(l); //lobg -> instant Instant instant1 = Instant.ofEpochMilli(1593601652508L); System.out.println(instant1); }1、类似于java.text.SimpleDateFormat。但其只用来创建日期的显示模板。 2、parse()方法是一种静态方法,使用LocalDateTime.parse()来调用。 3、format()方法需要使用LocalDateTime等类来调用。
为对LocalDateTime的格式化和解析
import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.Date; public class Test { public static void main(String args[]) { // JDK 8之前,String转Date, Date转String如下: Date date = new Date();// 实例化一个Date,用于获取当前系统时间。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 定义一个格式 System.out.println(date);// 输出当前系统时间 System.out.println(sdf.format(date)); // 将Date转为String try { // 将String转为Date,此处需要抛出异常 System.out.println(sdf.parse("2019-5-24")); } catch (ParseException e) { System.out.println("格式转换失败!"); } // JDK 8后,引入新的日期类,String与Date互转如下: LocalDateTime ldt = LocalDateTime.now();// 获取当前系统时间 // 定义格式 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println(ldt);// 输出当前系统时间 System.out.println(ldt.format(dtf));// 将Date转为String try { // 将String转为Date,注意,此处必须严格按照格式匹配,例如:MM不能写成5,只能写成05 // 此处会抛异常 System.out.println(LocalDateTime.parse("2019-5-24 12:22:33", dtf)); } catch (DateTimeParseException e) { System.out.println("格式转换失败!"); } // 这是正确的写法。注意LocalDateTime的格式为:yyyy-MM-dd HH:mm:ss // 而LlocalDate的格式为:yyyy-MM-dd,此处需要注意一下格式的写法。 System.out.println(LocalDateTime.parse("2019-05-24 12:22:33", dtf)); } } /* 测试结果: Fri May 24 10:58:09 JST 2019 2019-05-24 Fri May 24 00:00:00 JST 2019 2019-05-24T10:58:09.681 2019-05-24 10:58:09 格式转换失败! 2019-05-24T12:22:33 */