Java基础理论之时间相关类

日期时间类

此篇介绍了Date 类 ; DateFormat类 ;Calender 类 ;LocalDate 类中时间的使用

Date类

概述

java.util.Date类 表示特定的瞬间,精确到毫秒。

继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。  

  • public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
  • public Date(long 时间戳):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。

tips: 由于中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快8小时的时区,当格林尼治标准时间为0:00时,东八区的标准时间为08:00。
简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。

import java.util.Date;

public class Demo01Date {
    public static void main(String[] args) {
        // 创建日期对象,把当前的时间
        System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2020
        // 创建日期对象,把当前的毫秒值转成日期对象
        System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
    }
}

所属包

java.lang.Object 
java.util.Date 

All Implemented Interfaces: 
Serializable , Cloneable , Comparable < Date > 
已知直接子类: 
Date , Time , Timestamp 


public class Date extends Object implements Serializable, Cloneable, Comparable<Date>

构造方法:

Date() 分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。

Date(long date) 分配一个 Date对象,并将其初始化为表示自称为“时代”的标准基准时间以后的指定毫秒数,即1970年1月1日00:00:00 GMT。  

静态方法

static Date from(Instant instant) 从 Instant对象获取一个 Date的实例。  

接口方法

boolean after(Date when) 测试此日期是否在指定日期之后。  
boolean before(Date when) 测试此日期是否在指定日期之前。  
Object clone() 返回此对象的副本。  
int compareTo(Date anotherDate) 比较两个日期(1大于anotherDate,-1小于anotherDate,0等于anotherDate)。  
boolean equals(Object obj) 比较两个日期是否相等。  
static Date from(Instant instant) 从 Instant对象获取一个 Date的实例。   
long getTime() 返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒 数 。  
int hashCode() 返回此对象的哈希码值。  
void setTime(long time) 设置此 Date对象以表示1970年1月1日00:00:00 GMT后的 time毫秒的时间点。    
Instant toInstant() 将此 Date对象转换为 Instant 。  
String toString() 将此 Date对象转换为 String的形式: 

SimpleDateFormat

所属包

java.text Class SimpleDateFormat
java.lang.Object 
java.text.Format 
java.text.DateFormat 
java.text.SimpleDateFormat 

All Implemented Interfaces: 
Serializable , Cloneable 

public class SimpleDateFormat extends DateFormat

构造方法

SimpleDateFormat() 构造一个 SimpleDateFormat使用默认模式和日期格式符号为默认的 FORMAT区域设置。  
SimpleDateFormat(String pattern) 使用给定模式 SimpleDateFormat并使用默认的 FORMAT语言环境的默认日期格式符号。  
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)使用给定的模式和日期格式符号构造一个 SimpleDateFormat 。  
SimpleDateFormat(String pattern, Locale locale) 构造一个 SimpleDateFormat使用给定的模式和给定的区域设置的默认日期格式符号。 

接口方法

void applyLocalizedPattern(String pattern) 将给定的本地化模式字符串应用于此日期格式。  
void applyPattern(String pattern) 将给定的模式字符串应用于此日期格式。  
Object clone() 创建一个这个 SimpleDateFormat的副本。  
boolean equals(Object obj) 将给定的对象与此 SimpleDateFormat进行比较以获得相等性。  
StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) 将给定的 Date成日期/时间字符串,并将结果追加到给定的 StringBuffer 。  
AttributedCharacterIterator formatToCharacterIterator(Object obj) 
格式化一个对象,生成一个 AttributedCharacterIterator 。  
Date get2DigitYearStart() 返回100年期间的开始日期,2位数年份被解释为在内。  
DateFormatSymbols getDateFormatSymbols() 获取此日期格式的日期和时间格式符号的副本。  
int hashCode() 返回此 SimpleDateFormat对象的哈希码值。  
Date parse(String text, ParsePosition pos) 从字符串中解析文本以产生一个 Date 。  
void set2DigitYearStart(Date startDate) 设置100年期间,两位数年份将被解释为在用户指定的日期开始。  
void setDateFormatSymbols(DateFormatSymbols newFormatSymbols) 设置此日期格式的日期和时间格式符号。  
String toLocalizedPattern() 返回描述此日期格式的本地化模式字符串。  
String toPattern() 返回描述此日期格式的模式字符串。  


高频方法

  • public String format(Date date):将Date对象格式化为字符串。

  • public Date parse(String source):将字符串解析为Date对象。

     DateFormat df = new SimpleDateFormat("yyyy-MM-dd")
     //将当前日期转换为字符串
     String s = df.format(new Date());
     System.out.println("---------------------------------------------");
     //将字符串转换为日期对象
     DateFormat df = new SimpleDateFormat("yyyy/MM/dd")
     Date d = df.parse("1949/10/01")

LocalDate类

概述

JDK8中,新增了三个类,用以处理时间。

LocalDate专门处理日期,LocalTime专门处理时间,LocalDateTime包含了日期和时间,而且对于很多复杂的问题,都提供了现成的方法,比如:获取2017年12月的第一个周一,这样的处理,在以前,是很复杂的,而现在,只需要一行代码即可。(使用前,需要将JDK升级到1.8)

使用案例

   private static void practiceTime2() {
       // LocalDate 使用
       //获取当前日期
       LocalDate today = LocalDate.now();
       System.out.println(today);

       //构造日期
       LocalDate today2 = LocalDate.of(2020,4,23);
       System.out.println(today2);

       //构造日期      字符串严格按照yyyy-MM-dd
       LocalDate today3 = LocalDate.parse("2020-04-23");
       System.out.println(today3);

       //本月第一天
       LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
       System.out.println(firstDayOfMonth);
       //本月第二天    第n天
       LocalDate secondDayOfMonth = today.withDayOfMonth(2);
       System.out.println(secondDayOfMonth);

       //本月最后一天  方便解决任何年份的二月份多少天
       LocalDate lastDayOfMonth = today3.with(TemporalAdjusters.lastDayOfMonth());
       System.out.println(lastDayOfMonth);


       //获取2020年12月的第一个周一
       LocalDate firstDayOf201712 = LocalDate.parse("2020-12-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
       System.out.println(firstDayOf201712);

       System.out.println("~~~~~~~~~~~~~~~~~~~~~");
       // LocalTime 使用
       //获取当前时间  含有毫秒值
       LocalTime now = LocalTime.now();
       System.out.println(now);

       //获取当前时间   去掉毫秒值
       LocalTime now1 = LocalTime.now().withNano(0);
       System.out.println(now1);

       // 提供了把时分秒都设为0的方法
       LocalTime now2 = LocalTime.now().withHour(0);
       System.out.println(now2);

       //构造时间  00:20:55
       LocalTime time1 = LocalTime.of(0,20,55);
       System.out.println(time1);
       //构造时间  05:43:22
       LocalTime time2 = LocalTime.parse("05:43:22");
       System.out.println(time2);

       // LocalDateTime使用
       //标准时间
       LocalDateTime lt = LocalDateTime.now();
       System.out.println(lt);

   }

LocalTime类 

LocalDateTime类

LocalDateTime now = LocalDateTime.now();  //1 
LocalDateTime time = LocalDateTime.of(2022,11,18,23,23,25);  //2
//格式化时间

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 相当于SimpleDateFormat
LocalDateTIme tomorror = now.plusDays(1)  // 加1天
LocalDateT yesterday =now.minusDays(1) // 减一天

String dateStiring = tomorror .format(formatter);
// 将LocalDateTime转换为
LocalDateTime dateTime = LocalDateTime.parse(dateString,formatter); 
// 将字符串解析为LocalDateTime

方法:

月:1-12 日 1-31 时 1-24 分 0-60 秒 0-60
获取:
DayOfWeek getDayOfWeek() 获取星期几字段,这是一个枚举 DayOfWeek 。  
int getDayOfYear() 获得日期字段。
int getDayOfMonth() 获取月份字段。 
  
int getHour() 获取时间字段。  
int getMinute() 获取小时字段。  
int getMonthValue() 将月份字段从1到12。  
int getNano() 获得纳秒第二场。  
int getSecond() 获得第二分钟的字段。  
int getYear() 获取年份字段 

long getLong(TemporalField field) 从此日期时间获取指定字段的值为 long 。 

添加:

LocalDateTime plusHours(long hours) 以指定的时间(以小时为单位)返回此 LocalDateTime的副本。  
LocalDateTime plusMinutes(long minutes) 以指定的时间(以分钟为单位)返回此 LocalDateTime的副本。  
LocalDateTime plusMonths(long months) 返回这个 LocalDateTime的副本,其中指定的时间段以月为单位。  
LocalDateTime plusNanos(long nanos) 返回这个 LocalDateTime的副本,其指定时间以纳秒为单位。  
LocalDateTime plusSeconds(long seconds) 以指定的时间段返回此 LocalDateTime的副本,以秒为单位。  
LocalDateTime plusWeeks(long weeks) 返回这个 LocalDateTime的副本,并以指定的周期添加周数。  
LocalDateTime plusYears(long years) 返回这个 LocalDateTime的副本,其中指定的时间段以添加的年数表示。

减少
LocalDateTime minusDays(long days) 返回此 LocalDateTime的副本,其中指定的时间间隔以天为单位。  
LocalDateTime minusHours(long hours) 以指定的时间段返回此 LocalDateTime的副本,以减少的小时数。  
LocalDateTime minusMinutes(long minutes) 返回此 LocalDateTime的副本,以指定的时间间隔减去。  
LocalDateTime minusMonths(long months) 返回此 LocalDateTime的副本,指定的时间以月为单位减去。  
LocalDateTime minusNanos(long nanos) 返回这个 LocalDateTime的副本,以指定的时间减去纳秒。  
LocalDateTime minusSeconds(long seconds) 返回此 LocalDateTime的副本,其中指定的时间间隔以秒为单位。  
LocalDateTime minusWeeks(long weeks) 返回此 LocalDateTime的副本,其中指定的周期以周为单位减去。  
LocalDateTime minusYears(long years) 返回此 LocalDateTime的副本,并以减去的年份为单位。 
 

修改
LocalDateTime withDayOfMonth(int dayOfMonth) 返回此 LocalDateTime的副本。  
LocalDateTime withDayOfYear(int dayOfYear) 返回这个 LocalDateTime的副本,并更改日期。  
LocalDateTime withHour(int hour) 返回此日期值更改的 LocalDateTime的副本。  
LocalDateTime withMinute(int minute) 返回这个 LocalDateTime的副本,小时值更改。  
LocalDateTime withMonth(int month) 返回此年份更改的 LocalDateTime的副本。  
LocalDateTime withNano(int nanoOfSecond) 返回这个 LocalDateTime的副本,纳秒变化值。  
LocalDateTime withSecond(int second) 返回这个 LocalDateTime的副本,其中 LocalDateTime了第二分钟的值。  
LocalDateTime withYear(int year) 返回这个 LocalDateTime的副本,年份被更改。 

 Period 类(计算LocalDateTime之间时间)

static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive) 
获得一个 Period ,由两个日期之间的年数,月份和日期组成。  
两个日期间差多少时间 的 时间区间
int getDays()  获得此期间的天数。 获取相差的天数  
long toTotalMonths() 获得此期间的总月数。  

Duration 类(计算LocalDateTime之间时间)

static Duration between(Temporal startInclusive, Temporal endExclusive) 
获取一个 Duration表示两个时间对象之间的持续时间。  
long toDays() 获取此持续时间的天数。  
long toHours() 获取此持续时间内的小时数。  
long toMillis() 将此持续时间转换为总长度(以毫秒为单位)。  
long toMinutes() 获取此持续时间的分钟数。  
long toNanos() 将此持续时间转换为总长度,单位为纳秒,表示为 long 。  

Calender

概述:

java.util.Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
Calendar为抽象类,不能直接创建对象,而是通过静态方法创建,返回子类对象,如下:

Calendar静态方法

  • public static Calendar getInstance():使用默认时区和语言环境获得一个日历

所属包

java.util Class Calendar
java.lang.Object 
java.util.Calendar 

All Implemented Interfaces: 
Serializable , Cloneable , Comparable < Calendar > 

public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar>

构造方法

protected  Calendar() 构建具有默认时区和默认的 FORMAT语言环境的日历。  
protected  Calendar(TimeZone zone, Locale aLocale) 构造具有指定时区和区域设置的日历。  

静态方法

static Set<String> getAvailableCalendarTypes() 返回一个不可 Set的 Calendar ,其中包含运行时环境中 Set支持的所有日历类型。  
static Locale[] getAvailableLocales() 返回一个所有区域设置的数组,该类的 getInstance方法可以返回本地化实例。  
String getCalendarType() 返回此 Calendar的日历类型。  
String getDisplayName(int field, int style, Locale locale) 返回给定的 style和 locale中的日历 field的字符串表示 locale 。  
Map<String,Integer> getDisplayNames(int field, int style, Locale locale) 返回 Map包含日历的所有名称 field在给定 style和 locale及其相应的字段值。  
int getFirstDayOfWeek() 得到一周的第一天是什么 例如, SUNDAY在美国, MONDAY在法国。  
abstract int getGreatestMinimum(int field) 返回此 Calendar实例的给定日历字段的最高最小值。  
static Calendar getInstance() 使用默认时区和区域设置获取日历。  
static Calendar getInstance(Locale aLocale) 使用默认时区和指定的区域设置获取日历。  
static Calendar getInstance(TimeZone zone) 使用指定的时区和默认语言环境获取日历。  
static Calendar getInstance(TimeZone zone, Locale aLocale) 获取具有指定时区和区域设置的日历。  


接口方法

abstract void add(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段。  
boolean after(Object when) 返回 Calendar是否 Calendar指定时间之后的时间 Object 。  
boolean before(Object when) 返回此 Calendar是否 Calendar指定的时间之前指定的时间 Object 。  
void clear() 将所有的日历字段值和时间值(毫秒从偏移 Epoch如此) Calendar不确定。  
void clear(int field) 设置给定日历字段值和时间值(毫秒从偏移 Epoch如此) Calendar不确定。  
Object clone() 创建并返回此对象的副本。  
int compareTo(Calendar anotherCalendar) 比较时间值(从毫秒偏移量 Epoch由两个表示) Calendar对象。  
protected void complete() 填写日历字段中的任何未设置的字段。  
protected abstract void computeFields() 当前毫秒时间值转换为 time的日历字段值 fields[] 。  
protected abstract void computeTime() 将 fields[]中的当前日历字段值 转换为毫秒时间值 time 。  
boolean equals(Object obj) 将此 Calendar与指定的Object进行 Object 。  
int get(int field) 返回给定日历字段的值。  
int getActualMaximum(int field) 给定此 Calendar的时间值,返回指定日历字段可能具有的 Calendar 。  
int getActualMinimum(int field) 给定此 Calendar的时间值,返回指定的日历字段可以具有的 Calendar 。  
static Set<String> getAvailableCalendarTypes() 返回一个不可 Set的 Calendar ,其中包含运行时环境中 Set支持的所有日历类型。  
static Locale[] getAvailableLocales() 返回一个所有区域设置的数组,该类的 getInstance方法可以返回本地化实例。  
String getCalendarType() 返回此 Calendar的日历类型。  
String getDisplayName(int field, int style, Locale locale) 返回给定的 style和 locale中的日历 field的字符串表示 locale 。  
Map<String,Integer> getDisplayNames(int field, int style, Locale locale) 返回 Map包含日历的所有名称 field在给定 style和 locale及其相应的字段值。  
int getFirstDayOfWeek() 得到一周的第一天是什么 例如, SUNDAY在美国, MONDAY在法国。  
abstract int getGreatestMinimum(int field) 返回此 Calendar实例的给定日历字段的最高最小值。  
static Calendar getInstance() 使用默认时区和区域设置获取日历。  
static Calendar getInstance(Locale aLocale) 使用默认时区和指定的区域设置获取日历。  
static Calendar getInstance(TimeZone zone) 使用指定的时区和默认语言环境获取日历。  
static Calendar getInstance(TimeZone zone, Locale aLocale) 获取具有指定时区和区域设置的日历。  
abstract int getLeastMaximum(int field) 返回此 Calendar实例的给定日历字段的最低最大值。  
abstract int getMaximum(int field) 返回此 Calendar实例的给定日历字段的 Calendar 。  
int getMinimalDaysInFirstWeek() 获得一年中第一周所需的最低限度的日子; 例如,如果第一周被定义为包含一年中的第一个月的第一个星期,则此方法返回1。  
abstract int getMinimum(int field) 返回此 Calendar实例的给定日历字段的 Calendar 。  
Date getTime() 返回一个 Date表示此物体 Calendar的时间值(毫秒从偏移 Epoch “)。  
long getTimeInMillis() 以毫秒为单位返回此日历的时间值。  
TimeZone getTimeZone() 获取时区。  
int getWeeksInWeekYear() 返回由这个 Calendar表示的星期内的星期Calendar 。  
int getWeekYear() 返回这个 Calendar 。  
int hashCode() 返回此日历的哈希码。  
protected int internalGet(int field) 返回给定日历字段的值。  
boolean isLenient() 告诉日期/时间的解释是否宽松。  
boolean isSet(int field) 确定给定的日历字段是否具有值集,包括由 get方法调用触发的内部字段计算设置的值。  
boolean isWeekDateSupported() 返回此 Calendar是否支持周日期。  
abstract void roll(int field, boolean up) 在给定时间字段上添加或减少单个时间单位,而不改变较大的字段。  
void roll(int field, int amount) 将指定(签名)金额添加到指定的日历字段,而不更改较大的字段。  
void set(int field, int value) 将给定的日历字段设置为给定的值。  
void set(int year, int month, int date) 设置日历字段中的值 YEAR , MONTH和 DAY_OF_MONTH 。  
void set(int year, int month, int date, int hourOfDay, int minute) 设置日历字段中的值 YEAR , MONTH , DAY_OF_MONTH , HOUR_OF_DAY和 MINUTE 。  
void set(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段中的值 YEAR , MONTH , DAY_OF_MONTH , HOUR_OF_DAY , MINUTE和 SECOND 。  
void setFirstDayOfWeek(int value) 设置一周的第一天是什么? 例如, SUNDAY在美国, MONDAY在法国。  
void setLenient(boolean lenient) 指定日期/时间解释是否宽松。  
void setMinimalDaysInFirstWeek(int value) 设定一年中第一个星期所需的最短时间是多少? 例如,如果第一周被定义为包含一年中第一个月的第一天的第一周,请调用此值为1的方法。  
void setTime(Date date) 使用给定的 Date设置此日历的时间。  
void setTimeInMillis(long millis) 从给定的长值设置此日历的当前时间。  
void setTimeZone(TimeZone value) 以给定的时区值设置时区。  
void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 
设置这个 Calendar的日期与给定的日期说明符 - 周年,年周和星期几。  
Instant toInstant() 将此对象转换为Instant 。  
String toString() 返回此日历的字符串表示形式 


抽象方法

abstract void add(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段。  
boolean after(Object when) 返回 Calendar是否 Calendar指定时间之后的时间 Object 。  
boolean before(Object when) 返回此 Calendar是否 Calendar指定的时间之前指定的时间 Object 。  
void clear() 将所有的日历字段值和时间值(毫秒从偏移 Epoch如此) Calendar不确定。  
void clear(int field) 设置给定日历字段值和时间值(毫秒从偏移 Epoch如此) Calendar不确定。  
Object clone() 创建并返回此对象的副本。  
int compareTo(Calendar anotherCalendar) 比较时间值(从毫秒偏移量 Epoch由两个表示) Calendar对象。  
protected void complete() 填写日历字段中的任何未设置的字段。  
protected abstract void computeFields() 当前毫秒时间值转换为 time的日历字段值 fields[] 。  
protected abstract void computeTime() 将 fields[]中的当前日历字段值 转换为毫秒时间值 time 。  
boolean equals(Object obj) 将此 Calendar与指定的Object进行 Object 。  
int get(int field) 返回给定日历字段的值。  
int getActualMaximum(int field) 给定此 Calendar的时间值,返回指定日历字段可能具有的 Calendar 。  
int getActualMinimum(int field) 给定此 Calendar的时间值,返回指定的日历字段可以具有的 Calendar 。  
static Set<String> getAvailableCalendarTypes() 返回一个不可 Set的 Calendar ,其中包含运行时环境中 Set支持的所有日历类型。  
static Locale[] getAvailableLocales() 返回一个所有区域设置的数组,该类的 getInstance方法可以返回本地化实例。  
String getCalendarType() 返回此 Calendar的日历类型。  
String getDisplayName(int field, int style, Locale locale) 返回给定的 style和 locale中的日历 field的字符串表示 locale 。  
Map<String,Integer> getDisplayNames(int field, int style, Locale locale) 返回 Map包含日历的所有名称 field在给定 style和 locale及其相应的字段值。  
int getFirstDayOfWeek() 得到一周的第一天是什么 例如, SUNDAY在美国, MONDAY在法国。  
abstract int getGreatestMinimum(int field) 返回此 Calendar实例的给定日历字段的最高最小值。  
static Calendar getInstance() 使用默认时区和区域设置获取日历。  
static Calendar getInstance(Locale aLocale) 使用默认时区和指定的区域设置获取日历。  
static Calendar getInstance(TimeZone zone) 使用指定的时区和默认语言环境获取日历。  
static Calendar getInstance(TimeZone zone, Locale aLocale) 获取具有指定时区和区域设置的日历。  
abstract int getLeastMaximum(int field) 返回此 Calendar实例的给定日历字段的最低最大值。  
abstract int getMaximum(int field) 返回此 Calendar实例的给定日历字段的 Calendar 。  
int getMinimalDaysInFirstWeek() 获得一年中第一周所需的最低限度的日子; 例如,如果第一周被定义为包含一年中的第一个月的第一个星期,则此方法返回1。  
abstract int getMinimum(int field) 返回此 Calendar实例的给定日历字段的 Calendar 。  
Date getTime() 返回一个 Date表示此物体 Calendar的时间值(毫秒从偏移 Epoch “)。  
long getTimeInMillis() 以毫秒为单位返回此日历的时间值。  
TimeZone getTimeZone() 获取时区。  
int getWeeksInWeekYear() 返回由这个 Calendar表示的星期内的星期 Calendar 。  
int getWeekYear() 返回这个 Calendar 。  
int hashCode() 返回此日历的哈希码。  
protected int internalGet(int field) 返回给定日历字段的值。  
boolean isLenient() 告诉日期/时间的解释是否宽松。  
boolean isSet(int field) 确定给定的日历字段是否具有值集,包括由 get方法调用触发的内部字段计算设置的值。  
boolean isWeekDateSupported() 返回此 Calendar是否支持周日期。  
abstract void roll(int field, boolean up) 在给定时间字段上添加或减少单个时间单位,而不改变较大的字段。  
void roll(int field, int amount) 将指定(签名)金额添加到指定的日历字段,而不更改较大的字段。  
void set(int field, int value) 将给定的日历字段设置为给定的值。  
void set(int year, int month, int date) 设置日历字段中的值 YEAR , MONTH和 DAY_OF_MONTH 。  
void set(int year, int month, int date, int hourOfDay, int minute) 设置日历字段中的值 YEAR , MONTH , DAY_OF_MONTH , HOUR_OF_DAY和 MINUTE 。  
void set(int year, int month, int date, int hourOfDay, int minute, int second) 
设置字段中的值 YEAR , MONTH , DAY_OF_MONTH , HOUR_OF_DAY , MINUTE和 SECOND 。  
void setFirstDayOfWeek(int value) 设置一周的第一天是什么? 例如, SUNDAY在美国, MONDAY在法国。  
void setLenient(boolean lenient) 指定日期/时间解释是否宽松。  
void setMinimalDaysInFirstWeek(int value) 设定一年中第一个星期所需的最短时间是多少? 例如,如果第一周被定义为包含一年中第一个月的第一天的第一周,请调用此值为1的方法。  
void setTime(Date date) 使用给定的 Date设置此日历的时间。  
void setTimeInMillis(long millis) 从给定的长值设置此日历的当前时间。  
void setTimeZone(TimeZone value) 以给定的时区值设置时区。  
void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 设置这个 Calendar的日期与给定的日期说明符 - 周年,年周和星期几。  
Instant toInstant() 将此对象转换为Instant 。  
String toString() 返回此日历的字符串表示形式 


高频方法

根据Calendar类的API文档,常用方法有:

  • public int get(int field):返回给定日历字段的值。
  • public void set(int field, int value):将给定的日历字段设置为给定值。
  • public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
  • public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。

Calendar类中提供很多成员常量,代表给定的日历字段:

字段值含义
YEAR
MONTH月(从0开始,可以+1使用)
DAY_OF_MONTH月中的天(几号)
HOUR时(12小时制)
HOUR_OF_DAY时(24小时制)
MINUTE
SECOND
DAY_OF_WEEK周中的天(周几,周日为1,可以-1使用)

小贴士:

​ 西方星期的开始为周日,中国为周一。

​ 在Calendar类中,月份的表示是以0-11代表1-12月。

​ 日期是有大小关系的,时间靠后,时间越大。

使用案例:

private static void practiceTime() {

       //date 使用
       Date now = new Date();
       Date start = new Date(0L);
       System.out.println(start.compareTo(now));
       System.out.println(now.after(start));
       Date from = Date.from(new Date(System.currentTimeMillis()).toInstant());
       System.out.println(from);
       System.out.println(from.getTime());
       System.out.println("~~~~~~~~~~~~~~~~~~~~");


       // dataformat 使用
       DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
       System.out.println(dateFormat.format(from));
       String time = "1993-09-17-08-00-00";
       Date t = null;
       try {
           t = dateFormat.parse(time);
       } catch (ParseException e) {
           e.printStackTrace();
       }
       long time1 = t.getTime();
       System.out.println(time1);
       System.out.println("~~~~~~~~~~~~~~~~~~~~");


       // Calendar 使用
       Calendar calendarInstance = Calendar.getInstance();
       System.out.println(calendarInstance.get(Calendar.YEAR));
       System.out.println(calendarInstance.get(Calendar.MONTH)+1);
       System.out.println(calendarInstance.get(Calendar.DAY_OF_MONTH));
       System.out.println(calendarInstance.get(Calendar.WEEK_OF_MONTH));
       System.out.println(calendarInstance.getTime().getTime());
   }

工具类见:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值