java.util.Date

字段

private transien long fastTime;
利用fastTime字段来存储毫秒值

构造

public Date()
public Date(long date)

类方法

public static Date from(Instant instant)

实例方法

public long getTime()//获取毫秒值
public void setTime(long time)
public boolean equals(object o)//Data类重写后的equals用于比较两个Date实例是否相等
事实上是在比较两个Date实例所保存的毫秒值
public boolean before (Date when)
//当当前Date实例早于参数指定的Date实例时返回true
public boolean after(Date when)
//当当前Date实例晚于参数指定的Date实例时返回true
public Instant toInstant()

子类

java.sql.Date
java.sql.Time
java.sql.Timestamp

缺点

Date类不是最终类
Date类的实例时可变的
不是线程安全的
设计不友好:不能快速获得指定年月日对用的Date实例

java.util.Canlender

日历字段

public static final int YEAR=1;
public static final int MONTH=1;
public static final int DATE=1;
public static final int HOUR=1;
…MINUTE,SECIND,MIILLISECOND

类方法

public static Canlendar getInstance();//获取实例
public static Calendar getInstance(TimeZone tz,Locale locale)

实例方法

public int get (int field)//获得年/月/日
public int set(int field,int value)
public int set(int year, int month ,int date)
public int set(int year ,int month ,int date,int hourOfDay,int minute )
public int set(int year ,int month ,int date,int hourOfDay,int minute,int second )
public final void clear();//清空
public final void clear(int filed);//清空
public final Date getTime();//可以完成和Date的转换
public final void setTime (Date date)//传入Data类型的值完成转换
public long getTimeInMillis()
public long setTimeInMillis(long millis)
public void setTimeZone(TimeZone value)//设置时区
public void getTimeZone//获得时区
public boolean before(object when)
public boolean after(object when)
public boolean equals(object when)

缺点

Canlendar 类是可变的实例
不是线程安全
通过日历字段设置Canlendar实例所表示的瞬间比较繁琐

时区和地区

java.util.TimeZone表示时区

pubulic static TimeZone getDefault();//获得 当前默认时区
pubulic static TimeZone getTimeZone(String ID)//获得指定的时区
String id = “Asia/Chongqing” ;
TimeZone tz = TimeZone.getTimeZone( id );
System.out.println( tz );

Java.util.Locale表示 国家/地区

构造

public Locale(String language)
public Locale(String language,String country)//用两个字母表示
Locale first = new Locale( “zh” , “CN” );
System.out.println( first );

类方法

public static Locale getDefault()

实例方法

public final String getDisplayCountry()
public String getDisplayCountry(Locale inLocale)

java.text.DateFormate

类方法

通过 DateFormat 提供的 静态工厂方法 可以获得 DateFormat 实例,但是通常不会这样用
DateFormat.getInstance()
DateFormat.getDateInstance()
* DateFormat.getTimeInstance()

实例变量

通过 DateFormat 实例的 format 方法可以将一个 Date实例 格式化为 特定模式 的字符串

final Calendar c = Calendar.getInstance();
c.clear();
c.set( 1999 , 9, 30, 19, 30 , 50 );

  1. **final** **Date** d = c.getTime();<br /> **System**.out.println( d );
  2. **DateFormat** df = **DateFormat**.getInstance(); // 获取默认语言环境的默认格式化风格
  3. // 将 Date实例 所表示的瞬间 用 特定格式 的 字符串 来表示<br /> **String** s = df.format( d ) ; // 将 Date实例 格式化 为特定的字符串 形式<br /> **System**.out.println( s );
  4. df = **DateFormat**.getDateInstance(); // 仅处理日期<br /> **System**.out.println( df.format( d ) );
  5. df = **DateFormat**.getTimeInstance(); // 仅处理时间<br /> **System**.out.println( df.format( d ) );

子类

java.text SimpleDateFormat

java.time.ZoneId

类方法

1.public static ZoneId systemDefault()
// 使用 ZoneId 类中的 systemDefault 方法获取当前操作系统使用的时区
ZoneId zid = ZoneId.systemDefault() ;
System.out.println( zid ); // 可以在 操作系统中 修改时区进行测试

2..public static SetgetAvailable ZoneIds()
Set set = ZoneId.getAvailableZoneIds();
Object[] array = set.toArray(); // 将 Set 集合转换为 数组
for( int i = 0 , n = array.length ; i < n ; i ++ ) {
String id = (String)array[ i ] ;
ZoneId zoneId = ZoneId.of( id );
System.out.println( id + “ : “ + zoneId.getDisplayName( TextStyle.FULL , defaultLocale ) );
}

3.public static ZoneId Of(String ZoneId)
ZoneId zone = ZoneId.of( “US/Alaska” );
System.out.println( zone );

实例方法

public String getDisplayName(TextStyle, Lacale locale)

java.time.LacalDate

设计

LocalDate 类是个最终类
LocalDate类的实例时不可变的
private final int year
private final short month
private final short date
LocalDate类的构造都是私有的

类方法

1.public static LocalDate now()
LocalDate today = LocalDate.now(); // 获得当前日期
System.out.println( today );

2.public static LocalDate of(int year,int month,int dayOfMonth)
LocalDate birthdate1 = LocalDate.of( 1999 , 5 , 10 ); // 注意这里的月份从一开始
System.out.println( birthdate1 );

3.public static LocalDate of(int year,int month,int dayOfYear)
**

实例方法

LocalDate today = LocalDate.now();
System.out.println( today.plusDays( 15 ) ); // 增加 N 天
System.out.println( today.plusWeeks( 3 ) ); // 增加 N 周
System.out.println( today.plusMonths( -5 ) );
System.out.println( today.plusYears( -10 ) );

LocalDate date = LocalDate.ofYearDay( 2020 , 200 ); // 获取 指定年份 的 第 N 天对应的 日期
System.out.println( date );
System.out.println( date.isLeapYear() ); // 判断 指定日期 所在年份是否是闰年
System.out.println( date.lengthOfMonth() ); // 获取 当前日期 所在月份的总天数
System.out.println( date.lengthOfYear() ); // 获取 当前日期 所在年份的总天数

java.time.LocalTime

设计

LocalTime是个最终类
LocalTime类的实例时不可变的
private final int hour
private final byte minute
private final byte second
private final int nano(纳秒9位)

LocalTime类所有构造都是私有的

类方法

public static LocalTime now()
LocalTime now = LocalTime.now(); // 根据默认时区获取当地的当前时间
System.out.println( now );

public static LocalTime now(ZoneId zone)

ZoneId zone = ZoneId.of( “US/Alaska” );
now = LocalTime.now( zone ); // 根据 指定时区 获取该地当前时间
System.out.println( now );

public static LocalTime of(int hour,int minute)
LocalTime first = LocalTime.of( 15 , 35 );
System.out.println( first );

public static LocalTime of(int hour,int minute,int second)
LocalTime second = LocalTime.of( 15 , 35 , 40 );
System.out.println( second );

  1. <br />**public static LocalTime of(int hour,int minute,int second,int nano)**<br />LocalTime third = LocalTime.of( 22 , 44 , 55 , 100200300 ); // 时、分、秒、纳秒<br /> System.out.println( third );<br />**<br />**<br />System.out.println( LocalTime.MIN );<br /> System.out.println( LocalTime.MAX );<br /> System.out.println( LocalTime.MIDNIGHT );<br /> System.out.println( LocalTime.NOON );

java.time.LocalDateTime

设计

LocalDateTime是个最终类
LocalDateTime类的实例时不可变的
private final LocalDate date;
private final LocalTime time;
LocalDateTime类所有的构造都是私有的

类方法

now = LocalDateTime.now();
System.out.println(now); // now.toString()

// 根据 指定时区 获取该时区对应的 日期时间
now = LocalDateTime.now(ZoneId.of(“US/Alaska”));
System.out.println(now);

  1. **LocalDate** date = **LocalDate**.of(1998, 6, 10);<br /> **LocalTime** time = **LocalTime**.of(14, 20, 30, 111222333);<br /> **LocalDateTime ****first**** ****=**** LocalDateTime****.****of****(****date****,**** ****time);**<br /> **System**.out.println(first);

LocalDateTime second = LocalDateTime.of(1999, 7, 8, 5, 30);

  1. **System**.out.println(second);

实例方法

java.timeZonedDateTime

类方法

public static ZonedDateTime of(LocalDateTime localDateTime,Zoneld zone)
public static ZonedDateTime of(LocalDate date,LocalTime time,Zoneld zone)

java.time.Instant

类方法

public static Instant from (TemporalAccessor temporal)

实例方法

public ZonedDateTime atZone(ZoneId zone)

将LocalDateTime转换为LocalDate或LocalTime

用toLocalDate/toLacleTime
LocalDateTime now = LocalDateTime.now(); // 默认时区
System.out.println( now );

  1. // LocalDateTime ===> LocalDate<br /> **LocalDate** date = now.toLocalDate();<br /> **System**.out.println( date );
  2. // LocalDateTime ===> LocalTime<br /> **LocalTime** time = now.toLocalTime();<br /> **System**.out.println( time );

LocalDate实例转换为LocalDateTime实例

data,atTime(时,分,秒,纳秒)
LocalDate date = LocalDate.ofYearDay( 1999 , 200 );
System.out.println( date );

  1. // 获得 date 所表示日期的 00:00:00.000000000 对应的 LocalDateTime实例<br /> **LocalDateTime** first = date.atStartOfDay();<br /> **System**.out.println( first );
  2. **LocalDateTime** second = date.atTime( 5 , 30 );<br /> **System**.out.println( second );
  3. **LocalDateTime** thrid = date.atTime( 5 , 30 , 40 );<br /> **System**.out.println( thrid );
  4. **LocalDateTime** fourth = date.atTime( 5 , 30 , 40 , 100200300 );<br /> **System**.out.println( fourth );
  5. **LocalTime** time = **LocalTime**.of( 17 , 20 , 30, 400500600 );<br /> **LocalDateTime** fifth = date.atTime( time );<br /> **System**.out.println( fifth );

将LocalTime实例转换为LocalDateTime实例

LocalTime time = LocalTime.of( 16 , 50 , 30, 400500600 );
System.out.println( time );

  1. **LocalDate** date = **LocalDate**.now(); // 默认时区
  2. **LocalDateTime** first = time.atDate( date );<br /> **System**.out.println( first );

将Date实例转换为LocalDateTime/LocalDate/LocalTime类

  • 1、java.util.Date ===> java.time.LocalDateTime
    java.util.Date —-> java.time.Instant —-> java.time.ZonedDateTime —-> java.time.LocalDateTime
    2、java.util.Date ===> java.time.LocalDate
    java.util.Date —-> java.time.Instant —-> java.time.ZonedDateTime —-> java.time.LocalDate
    3、java.util.Date ===> java.time.LocalTime
    java.util.Date —-> java.time.Instant —-> java.time.ZonedDateTime —-> java.time.LocalTime
    Calendar c = Calendar.getInstance();
    c.clear();
    c.set( 1999 , 9 , 10 , 20 , 30 , 40 );
    final Date utilDate = c.getTime();
    *System
    .out.println( utilDate );

    1. // 根据 java.util.Date 实例 获得 与之对应的 java.time.Instant 实例<br /> **Instant** instant = utilDate.toInstant();<br /> **System**.out.println( instant );
    2. **ZoneId** zone = **ZoneId**.systemDefault();<br /> // 根据 Instant 实例获得 带有时区的 日期时间对象 ( ZonedDateTime实例 )<br /> **ZonedDateTime** zdt = instant.atZone( zone );<br /> **System**.out.println( zdt );
    3. // ZonedDateTime ===> LocalDateTime<br /> **LocalDateTime** datetime = zdt.toLocalDateTime() ;<br /> **System**.out.println( datetime );
    4. // ZonedDateTime ===> LocalDate<br /> **LocalDate** date = zdt.toLocalDate() ;<br /> **System**.out.println( date );
    5. // ZonedDateTime ===> LocalTime<br /> **LocalTime** time = zdt.toLocalTime() ;<br /> **System**.out.println( time );

将LocalDateTime/LocalDate/LocalTime类型的实例转换为java.util.Date实例

LocalDate date = LocalDate.of( 1949 , 10 , 1 );
LocalTime time = LocalTime.of( 10 , 0 );
LocalDateTime datetime = LocalDateTime.of( date , time );
System.out.println( datetime );

  1. **ZoneId** zone = **ZoneId**.systemDefault() ;
  2. // ZonedDateTime zonedDateTime = ZonedDateTime.of( date , time , zone );<br /> **ZonedDateTime** zonedDateTime = **ZonedDateTime**.of( datetime , zone );
  3. // ZonedDateTime 类 实现了 TemporalAccessor 接口<br /> **Instant** instant = **Instant**.from( zonedDateTime ) ;
  4. // 将一个 java.time.Instant 实例 转换为 java.util.Date 实例<br /> **Date** utilDate = **Date**.from( instant ) ;<br /> **System**.out.println( utilDate );

了解java.sql包中的Date和Time类并测试其valueOf方法、toLocalDate/toLocalTime方

long millis = 1000L 60 60 24 365 50 ;
// java.sql.Date 类 是 java.util.Date 类的子类,用来表示日期
java.sql.Date date = new java.sql.Date( millis );
*System
.out.println( date );

  1. // 直接将 java.sql.Date 实例转换为 java.time.LocalDate 实例<br /> java.time.LocalDate localDate = date.toLocalDate();<br /> **System**.out.println( localDate );
  2. **System**.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
  3. **long** ms = 1000L * 60 * 60 * 15 ;<br /> // java.sql.Time 类 是 java.util.Date 类的子类,用来表示日期<br /> java.sql.Time time = **new** java.sql.Time( ms );<br /> **System**.out.println( time );
  4. **LocalTime** localTime = time.toLocalTime();<br /> **System**.out.println( localTime );
  5. **System**.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
  6. java.time.LocalDate birthdate = java.time.LocalDate.of( 1998 , 10 , 20 );<br /> **System**.out.println( birthdate );<br /> // 使用 java.sql.Date 类中的 valueOf 方法将 LocalDate 转换为 java.sql.Date 实例<br /> java.sql.Date sqlDate = java.sql.Date.valueOf( birthdate );<br /> **System**.out.println( sqlDate );
  7. **System**.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
  8. java.time.LocalTime now = java.time.LocalTime.now();<br /> java.sql.Time sqlTime = java.sql.Time.valueOf( now );<br /> **System**.out.println( sqlTime );<br /> <br />