首页 > 编程语言 > 详细

在 Java 中涉及日期和时间的相关类以及它们之间的转换

时间:2020-06-03 19:36:06      阅读:61      评论:0      收藏:0      [点我收藏+]

日期 和 时间

1、java.util.Date 类

1.1、字段 ( Field )

使用一个 long 类型的数字 来存储毫秒值

 private transient long fastTime;

 

1.2、构造

 /**
  *   public Date() {
  *         this(System.currentTimeMillis()); // 调用下面的构造
  *     }
  *
  *     public Date(long date) {
  *         this.fastTime = date;
  *     }
  *   1、类 Date 表示特定的瞬间,精确到毫秒
  *
  *   2、Date 类 实例内部封装了 一个 存储毫秒值的 字段

 

1.3、方法

 

 package datatime;
 ?
 import java.util.Date;
 ?
 /**
  * 比较两个 Date 实例是否相等 public boolean equals ( Object o )
  * boolean before / after ( Date when ) 判断 早晚
  *
  *   大约每一两年出现会产生闰秒
  *
  * */
 ?
 public class DateTest2 {
 ?
     public static void main(String[] args) {
 ?
         long millis = System.currentTimeMillis();
 ?
         Date now = new Date(millis);
         System.out.println(now);
 ?
         long day = 1000L * 24 * 60 * 60; // 一天的毫秒值
 ?
         Date first = new Date(millis - day);
         System.out.println(first);
 ?
 ?
         Date second = new Date(millis);
         System.out.println(second);
 ?
         Date third = new Date(millis + day);
         System.out.println(third);
 ?
         System.out.println("~~~~~~~~~~~");
 ?
         // equals 是被重写过的 比较两个 Date 实例是否相等
         System.out.println(first.equals(now));
         System.out.println(second.equals(now));
         System.out.println(third.equals(now));
 ?
         System.out.println("~~~~~~~~~~~");
         System.out.println(first.before(now));
         System.out.println(second.before(now));
         System.out.println(third.before(now));
 ?
 ?
         System.out.println("~~~~~~~~~~~");
         System.out.println(first.after(now));
         System.out.println(second.after(now));
         System.out.println(third.after(now));
 ?
 ?
 ?
    }
 ?
 }
 ?

 

1.4、Date 存在的缺陷

  • Date 类 不是最终类

  • Date 类的实例是可变的

  • 多线程会不安全

  • 设计不友好 无法快速获得指定年月日对应的 Date 的实例

2、java.util.Calendar 类

2.1、概述:

The Calendar class is an abstract class that provides methods for converting between a specific instant in time and a set of calendar fields such as YEAR, MONTH, DAY_OF_MONTH, HOUR, and so on,

优点:

  • 相对于 Date 类来说设计上较友好

 

缺点:

  • 线程不安全

  • Calendar 类的实例是可变的

 

2.2、字段( Filed )

字段

 

  •  public static final int YEAR;
     ----

类方法

  • public static Calendar getInstance()

  • public static Calendar getInstance( TimeZone timeZone , Locale locale )

 package datatime;
 ?
 import java.util.Calendar;
 import java.util.GregorianCalendar;
 ?
 /**
  * 1、java.util.Calendar 类是个抽象类
  * 2、java.util.GregorianCalendar 类是 Calendar 的子类
  * 3、Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
  *       日历字段 ( calendar field ) 就是表示 特定瞬间 中某个部分的 字段 ,比如:
  *       Calendar.YEAR 表示年 、
  *       Calendar.MONTH 表示月、
  *       Calendar.DATE 表示天 、
  *       Calendar.HOUR 表示小时 ( 12 小时进制 ,分上午和下午 ) 、
  *       Calendar.HOUR_OF_DAY 表示小时 ( 24 小时进制 ) 、
  *       Calendar.MINUTE 表示分钟 、
  *       Calendar.SECOND 表示秒 、
  *       Calendar.MILLISECOND 表示毫秒
  * 4、瞬间 可用毫秒值来表示,它是距历元的偏移量
  * 历元: 即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历
  * 5、通过 Calendar 实例 调用 get( int) 方法可以获得指定 日历字段 的值
  */
 public class CalendarTest1 {
 ?
     public static void main(String[] args) {
 ?
         // 父类类型的 引用变量 指向了 子类类型的对象
         Calendar calendar = new GregorianCalendar(); // 默认地区 、默认时区
         System.out.println( calendar );
 ?
         StringBuilder builder = new StringBuilder();
 ?
         int year = calendar.get( Calendar.YEAR );
         builder.append( year + "年" );
 ?
         // 鬼子那边的月份是从 零 开始计数的
         int month = calendar.get( Calendar.MONTH ) + 1 ;
         builder.append( month + "月" );
 ?
         int date = calendar.get( Calendar.DATE );
         builder.append( date + "日" );
 ?
         int hours = calendar.get( Calendar.HOUR_OF_DAY );
         builder.append( hours + ":" );
 ?
         int minutes = calendar.get( Calendar.MINUTE );
         builder.append( minutes + ":" );
 ?
         int seconds = calendar.get( Calendar.SECOND );
         builder.append( seconds + "." );
 ?
         int millis = calendar.get( Calendar.MILLISECOND );
         builder.append( millis );
 ?
         String s = builder.toString();
         System.out.println( s );
    }
 ?
 }
 ?

2.3、子类 GregorianCalenda

子类

 

 // 父类类型的 引用变量 指向了 子类类型的对象
 Calendar calendar = new GregorianCalendar(); // 默认地区 、默认时区

 

将时间转化为 Calendar 对象实例 ( 注意calendar.clear() 方法用来清空字段 )

 

 

 package datatime;
 ?
 import java.util.Calendar;
 ?
 /**
  * 1、通过 静态工厂方法 来获取 Calendar 类的实例
  * ( 这里的 静态工厂方法 就是 Calendar 类中的 返回 Calendar实例 的 类方法 )
  * 2、设置 Calendar 实例所表示的 瞬间 :
  * public void set( int field , int value ) 为 指定的日历字段 设置 指定的值,比如 c.set( Calendar.YEAR , 1999 )
  * public final void set( int year , int month , int date )
  * public final void set( int year , int month , int date , int hourOfDay , int minute )
  *   public final void set( int year , int month , int date , int hourOfDay , int minute , int second )
  */
 public class CalendarTest2 {
 
  public static void main(String[] args) {
 
  String s ;
 
  // 父类类型的 引用变量 指向了 子类类型的对象
  Calendar calendar = Calendar.getInstance(); // 默认地区 、 默认时区
  System.out.println( calendar );
  System.out.println( calendar.getClass() ); // 运行时类型
  // 在 同一个类中使用 本类声明的 类方法时可以省略类名
  s = toString( calendar ) ; // s = CalendarTest2.toString( calendar ) ;
  System.out.println( s );
 
  /*
  calendar.set( Calendar.YEAR , 1999 );
  calendar.set( Calendar.MONTH , 5 ); // 注意: 鬼子那边月份从零开始计数
  calendar.set( Calendar.DATE , 10 );
  calendar.set( Calendar.HOUR_OF_DAY , 7 );
  calendar.set( Calendar.MINUTE , 50 );
  calendar.set( Calendar.SECOND , 0);
  calendar.set( Calendar.MILLISECOND , 0 );
  */
 
  calendar.set( 1999 , 5 , 10, 7, 50 , 0 );
  calendar.set( Calendar.MILLISECOND , 0 );
 
  System.out.println( calendar );
 
  s = toString( calendar ) ;
  System.out.println( s );
 
  }
 
  public static String toString( Calendar calendar ) {
  StringBuilder builder = new StringBuilder();
 
  int year = calendar.get( Calendar.YEAR );
  builder.append( year + "年" );
 
  // 鬼子那边的月份是从 零 开始计数的
  int month = calendar.get( Calendar.MONTH ) + 1 ;
  builder.append( month + "月" );
 
  int date = calendar.get( Calendar.DATE );
  builder.append( date + "日" );
 
  int hours = calendar.get( Calendar.HOUR_OF_DAY );
  if( hours < 10 ) {
  builder.append( ‘0‘ );
  }
  builder.append( hours + ":" );
 
  int minutes = calendar.get( Calendar.MINUTE );
  if( minutes < 10 ) {
  builder.append( ‘0‘ );
  }
  builder.append( minutes + ":" );
 
  int seconds = calendar.get( Calendar.SECOND );
  if( seconds < 10 ) {
  builder.append( ‘0‘ );
  }
  builder.append( seconds + "." );
 
  int millis = calendar.get( Calendar.MILLISECOND );
  builder.append( millis );
 
  String s = builder.toString();
  return s ;
  }
 
 }
 ?
 ?

 

 

3.通过时区来获得 Calendar 实例对象

 

 package datatime;
 ?
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Locale;
 import java.util.TimeZone;
 ?
 /** 1、时区:TimeZone 地区:Locale
  *
  * */
 ?
 public class CalendarTest4 {
 ?
     public static void main(String[] args) {
 ?
         Locale defaultLocale = Locale.getDefault(); // 类方法
         System.out.println(defaultLocale);
 ?
 ?
         Locale zhCN = new Locale("zh","CN");
         System.out.println(zhCN);
 ?
         Locale zhTW = new Locale("zh","TW");
         System.out.println(zhTW);
 ?
         Locale third = new Locale("en","US");
         System.out.println(third);
 ?
 ?
         // 获得 默认的时区
         TimeZone defaultTimeZone = TimeZone.getDefault();
         System.out.println(defaultTimeZone);
 ?
         String id = "Asia/Shanghai";
         TimeZone timeZone = TimeZone.getTimeZone(id);
         System.out.println(timeZone);
 ?
         System.out.println("~~~~~~~~~~~~~");
 ?
         /*String[] ids = TimeZone.getAvailableIDs();
         for (int i = 0; i < ids.length; i++) {
             System.out.println(ids[i]);
         }*/
 ?
         Calendar calendar = Calendar.getInstance(timeZone,third);
         System.out.println(calendar);
 ?
         System.out.println(calendar.getTime());
 ?
 ?
    }
 }
 ?

 

 

3、java.time.LocalDate 类

设计:

  • LocalDate 类 是一个最终类

  • LocalDate的实例是不可变的

    • private final int year;

    • private final short month;

    • private final short date;

  • 构造私有

常量

 

 public static final LocalDate MIN = of(-999999999, 1, 1);
 public static final LocalDate MAX = of(999999999, 12, 31);
 public static final LocalDate EPOCH = of(1970, 1, 1);a

通过静态工厂模式获取实例

 

  • LocalDate birthDay = LocalDate.of(1999,2,2);

  • LocalDate today = LocalDate.now(); // 获得当前日期

 

 package datatime;
 ?
 import java.time.LocalDate;
 ?
 /**
  * 1、了解 LocalDate 中的常量 MIN / MAX / EPOCH
  * 2、熟练使用 LocalDate 类中的 静态工厂模式 now() / of( int , int ,int )
  * 3、理解 LocalDate 内部设计
  * LocalDate 类是 final 修饰的
  * 构造方法 私有
  * */
 ?
 public class LocalDateTest {
 ?
     public static void main(String[] args) {
         System.out.println(LocalDate.MIN); // 最小
         System.out.println(LocalDate.EPOCH); // 历元
         System.out.println(LocalDate.MAX);
 ?
         System.out.println("~~~~~~~~~~~");
         LocalDate today = LocalDate.now(); // 获得当前日期
         System.out.println(today);
 ?
 ?
         LocalDate birthDay = LocalDate.of(1999,2,2);
         System.out.println(birthDay);
 ?
         System.out.println("~~~~~~~~~~~~~~~");
 ?
         System.out.println(today.plusDays(5));
         System.out.println(today.plusMonths(5));
         System.out.println(today.plusYears(-15));
 ?
         System.out.println("~~~~~~~~~~~~~~~");
 ?
         System.out.println(today.isLeapYear());
         System.out.println(today.lengthOfYear());
         System.out.println(today.lengthOfMonth());
    }
 ?
 }
 ?

 

4、java.time.ZoneId 类

  • 1、了解 java.time.ZoneId 表示时区

  • 2、ZoneId.systemDefault 获取系统时区

  • 3、ZoneId.getAvailableZoneIds() 获取 JVM 支持的所有时区编号

  • 4、ZoneId.of("Hongkong"); 根据指定的时区编号 获取相对应的 ZoneId 实例

  • 5、LocalDate date = LocalDate.now(hongkong); 可以获取 时区对应的当前日期

 

 package datatime;
 ?
 import java.time.LocalDate;
 import java.time.ZoneId;
 import java.util.Set;
 /**
  * 1、了解 java.time.ZoneId 表示时区
  * 2、ZoneId.systemDefault 获取系统时区
  * 3、ZoneId.getAvailableZoneIds() 获取 JVM 支持的所有时区编号
  * 4、ZoneId.of("Hongkong"); 根据指定的时区编号 获取相对应的 ZoneId 实例
  * 5、LocalDate date = LocalDate.now(hongkong); 可以获取 时区对应的当前日期
  *
  * */
 public class ZoneIdTest {
 ?
     public static void main(String[] args) {
         // 使用 ZoneId 类中的 systemDefault() 方法 获取当前系统的时区
         ZoneId zoneId = ZoneId.systemDefault();
         System.out.println(zoneId);
 ?
         System.out.println("~~~~~~~~~~~~~");
 ?
         // 获得当前 JVM 所支持的所有 ZoneId
         Set<String> set = ZoneId.getAvailableZoneIds();
         Object[] objects = set.toArray(); // 将set 集合转化为数组
 ?
 //       for (Object o : objects) { // 为了方便看输出 暂时不遍历
 //           System.out.println(o);
 //       }
 ?
         System.out.println("~~~~~~~~~~~~~");
 ?
         // 根据指定的 时区编号( ZoneId ) 来获取相应的 ZoneId 实例
         ZoneId hongkong = ZoneId.of("Hongkong");
         System.out.println(hongkong);
 ?
 ?
         System.out.println("~~~~~~~~~~~~~~");
 ?
         LocalDate date = LocalDate.now(hongkong);
         System.out.println(date);
 ?
 ?
    }
 ?
 }
 ?

 

5、java.time.LocalTime 类

 

LocalTime 实例 表示某一天当中的时间

获取实例的方法 与 之前 的类相似

通过 LocalTime 类的 类方法 来获取 LocalTime 实例:

now() / now(ZoneId) / of( int , int ) / of( int , int , int ) / of ( int , int , int , int)

 

 package cn.edu.ecut;
 ?
 import java.time.LocalTime;
 import java.time.ZoneId;
 ?
 /**
  * 1、理解 java.time.LocalTime 表示某一天当中的时间
  * 2、通过 LocalTime 类的 类方法 来获取 LocalTime 实例: now() / now(ZoneId) / of( int , int ) / of( int , int , int ) / of ( int , int , int , int)
  * 3、秒( s ) 、毫秒 ( ms )、微秒(μs)、纳秒(ns) 、皮秒(ps)之间的换算
  *     1s = 1000ms 。[ 毫秒 ( millisecond ) ]
  *     1ms = 1000μs 。[ 微秒 ( microsecond ) ]
  *     1μs = 1000ns 。[ 纳秒 也叫 毫微秒 ( nanosecond ) ]
  *     1ns = 1000ps 。[ 皮秒 ( picosecond ) ]
  */
 public class LocalTimeTest {
 ?
     public static void main(String[] args) {
 ?
         System.out.println( ZoneId.systemDefault() ); // 输出操作系统使用的默认时区
 ?
         LocalTime now = LocalTime.now(); // 根据默认时区获取当地的当前时间
         System.out.println( now );
 ?
         ZoneId zone = ZoneId.of( "US/Alaska" );
         now = LocalTime.now( zone ); // 根据 指定时区 获取该地当前时间
         System.out.println( now );
 ?
         System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
 ?
         LocalTime first = LocalTime.of( 15 ,  35 );
         System.out.println( first );
 ?
         LocalTime second = LocalTime.of( 15 ,  35 , 40 );
         System.out.println( second );
 ?
         LocalTime third = LocalTime.of( 22 , 44 ,  55 , 100200300 ); // 时、分、秒、纳秒
         System.out.println( third );
 ?
         System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
 ?
         System.out.println( LocalTime.MIN );
         System.out.println( LocalTime.MAX );
         System.out.println( LocalTime.MIDNIGHT );
         System.out.println( LocalTime.NOON );
 ?
    }
 ?
 }
 ?

6、LocalDateTime ====> LocalDate / LocalTime

 

通过使用 LocalDateTime 的 实例方法

  • toLocalDate()

  • toLocalTime()

 

 package datatime;
 ?
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 ?
 public class TransformTest {
     public static void main(String[] args) {
 ?
         LocalDateTime now = LocalDateTime.now(); // 默认时区
         System.out.println(now);
 ?
         LocalDate date = now.toLocalDate();
         System.out.println(date);
 ?
         LocalTime time = now.toLocalTime();
         System.out.println(time);
 ?
    }
 }

7、LocalDate ====> LocalDateTime

 

从 LocalDate 转换为 LocalDateTime 对象 是需要在 LocalDate 基础上 添加一个 时间

在 LocalDate 中提供一个 方法 atTime( )

参数可以是 LocalTime 的引用 也可以是 时分秒

  •  public LocalDateTime atTime(LocalTime time);
     public LocalDateTime atTime(int hour, int minute);
     public LocalDateTime atTime(int hour, int minute, int second);
     public LocalDateTime atTime(int hour, int minute, int second, int nanoOfSecond);
     // 等等重载方法
 package datatime;
 ?
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 ?
 public class TransformTest2 {
     public static void main(String[] args) {
 ?
         LocalDate date = LocalDate.ofYearDay(1999,200);
         System.out.println(date);
 ?
 ?
         // 获得 date 所表示的日期的 00:00:00:000000000 对应的 LocalDateTime 实例
         LocalDateTime first = date.atStartOfDay();
         System.out.println(first);
 ?
         LocalDateTime second = date.atTime(5,30);
         System.out.println(second);
 ?
         LocalDateTime third = date.atTime(LocalTime.of(6,30));
         System.out.println(third);
 ?
    }
 }

 

 

8、LocalDate 和 LocalTime 组合成 LocalDateTime

 

使用 LocalDateTime 类中的类方法 of()

 package datatime;
 ?
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 ?
 public class TransformTest3 {
     public static void main(String[] args) {
 ?
         LocalTime time = LocalTime.of(16,50,30,000100560);
         System.out.println(time);
 ?
         LocalDate date = LocalDate.now();
 ?
         LocalDateTime first = LocalDateTime.of(date,time);
         System.out.println(first);
 ?
    }
 }

 

9、java.util.Date ===> java.time.LocalDateTime

 

 package datatime;
 ?
 import java.time.*;
 import java.util.Calendar;
 import java.util.Date;
 ?
 /**
  * java.util.Date ===> java.time.LocalDateTime
  * */
 ?
 public class TransformTest4 {
     public static void main(String[] args) {
 ?
         Calendar c = Calendar.getInstance();
         c.clear();
         c.set(1999,2,2,14,30,40);
 ?
 ?
         final Date utilDate = c.getTime();
         System.out.println(utilDate);
 ?
         // 根据 java.util.Date 实例 获得 与之对应的 Instant 实例
         Instant instant = utilDate.toInstant();
         System.out.println(instant);
 ?
         ZoneId zoneId = ZoneId.systemDefault();
         // 根据 Instant 实例 获得带有时区的日期时间对象
         ZonedDateTime zonedDateTime = instant.atZone(zoneId);
         System.out.println(zonedDateTime);
 ?
 ?
         // ZoneDateTime == > LocalDateTime
         LocalDateTime dateTime = zonedDateTime.toLocalDateTime();
         System.out.println(dateTime);
 ?
         // ZoneDateTime == > LocalDate
         LocalDate date =zonedDateTime.toLocalDate();
         System.out.println(date);
 ?
         // ZoneDateTime == > LocalTime
         LocalTime time = zonedDateTime.toLocalTime();
         System.out.println(time);
 ?
    }
 }

 

10、java.time.LocalDateTime ===> java.util.Date

 

 package datatime;
 ?
 import java.time.*;
 import java.util.Calendar;
 import java.util.Date;
 ?
 /**
  * java.time.LocalDateTime ===> java.util.Date
  * */
 ?
 public class TransformTest5 {
     public static void main(String[] args) {
 ?
         LocalDate date = LocalDate.of(1999,2,2);
         LocalTime time = LocalTime.of(10,30);
 ?
 ?
         LocalDateTime dateTime = LocalDateTime.of(date,time);
         System.out.println(dateTime);
 ?
         ZonedDateTime zonedDateTime = ZonedDateTime.of(date,time,ZoneId.systemDefault());
         Instant instant = zonedDateTime.toInstant();
 ?
         Date date1 = Date.from(instant);
         System.out.println(date1);
 ?
 ?
    }
 }

 

11、java.util.Date 和 java.sql.Date

 

 package datatime;
 ?
 import java.sql.Date;
 import java.sql.Time;
 import java.time.*;
 ?
 /**
  * 1、java.sql.Date 和 java.sql.Time 类 都是 java.util.Date 的子类
  * 2、使用 java.util.Date 的引用变量 可以指向 java.sql.Date 和 java.sql.Time 实例
  * 3、因此 将 java.time.LocalDate 快速转换为 java.util.Date 的方法就是 java.sql.Date.valueOf(LocalDate)
  * 3、因此 将 java.time.LocalTime 快速转换为 java.util.Time 的方法就是 java.sql.Date.valueOf(LocalTime)
  * */
 ?
 public class TransformTest6 {
     public static void main(String[] args) {
 ?
         long mills = 1000L * 60 * 60 * 24 * 365 * 50;
         java.sql.Date date = new java.sql.Date(mills);
         System.out.println(date);
 ?
         LocalDate localDate = date.toLocalDate();
         System.out.println(localDate);
 ?
 ?
         long ms = 1000L * 60 * 60 * 15;
         Time time = new Time(ms);
         System.out.println(time); // 东八区 + 8
 ?
         LocalTime localTime = time.toLocalTime();
         System.out.println(localTime);
 ?
         System.out.println("~~~~~~~~");
 ?
         LocalDate birthday = LocalDate.of(1999,2,2);
         System.out.println(birthday);
         Date sqlDate = Date.valueOf(birthday);
         System.out.println(sqlDate);
 ?
         System.out.println("~~~~~~~~~~~");
 ?
         LocalTime now = time.toLocalTime();
         System.out.println(now);
 ?
 ?
    }
 }

 

12、java.text.DateFormat 类

 

 

 package datatime;
 ?
 import java.text.DateFormat;
 import java.util.Calendar;
 import java.util.Date;
 ?
 /**
  * 1、通过 DateFormat 提供的 静态工厂方法 可以获得 DateFormat 实例,但是通常不会这样用
  *     DateFormat.getInstance()
  *     DateFormat.getDateInstance()
  *     DateFormat.getTimeInstance()
  * 2、通过 DateFormat 实例的 format 方法可以将一个 Date实例 格式化为 特定模式 的字符串
  */
 public class DateFormatTest1 {
 ?
    public static void main(String[] args) {
       
       final Calendar c = Calendar.getInstance();
       c.clear();
       c.set( 1999 , 9, 30, 19, 30 , 50 );
       
       final Date d = c.getTime();
       System.out.println( d );
       
       DateFormat df = DateFormat.getInstance(); // 获取默认语言环境的默认格式化风格
       
       // 将 Date实例 所表示的瞬间 用 特定格式 的 字符串 来表示
       String s = df.format( d ) ; // 将 Date实例 格式化 为特定的字符串 形式
       System.out.println( s );
       
       df = DateFormat.getDateInstance(); // 仅处理日期
       System.out.println( df.format( d ) );
       
       df = DateFormat.getTimeInstance(); // 仅处理时间
       System.out.println( df.format( d ) );
 ?
    }
 ?
 }

 

 

 package datatime;
 ?
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 ?
 /**
  * 1、通过创建 SimpleDateFormat 类的实例来完成 日期格式化操作
  * 2、在创建 SimpleDateFormat 对象时,一定要注意 日期模式
  */
 public class DateFormatTest2 {
 ?
    public static void main(String[] args) {
       
       final Calendar c = Calendar.getInstance();
       c.clear();
       c.set( 1999 , 9, 30, 19, 30 , 50 );
       
       final Date d = c.getTime();
       System.out.println( d );
       
       // Locale.setDefault( new Locale( "en" , "US") ); // 设置默认的国家/地区
       
       // final String pattern = "Gyyyy年MM月dd日 E HH:mm:ss.SSS" ;
       final String pattern = "Gyyyy年MM月dd日 EEEE HH:mm:ss.SSS" ;
       // 父类类型的引用 变量 指向了 子类类型的对象
       DateFormat df = new SimpleDateFormat( pattern );
       
       String s = df.format( d ); // 将 Date实例 格式化为 特定模式 的 字符串
       System.out.println( s );
 ?
    }
 ?
 }

 

 

 

 

 package datatime;
 ?
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 ?
 /**
  * 通过 SimpleDateFormat实例 来完成 将符合 特定模式 的 字符串 解析为 Date实例
  */
 public class DateFormatTest3 {
 ?
    public static void main(String[] args) throws ParseException {
       
       String source = "公元2044年10月30日 星期日 19:30:50.000" ;
       
       final String pattern = "Gyyyy年MM月dd日 EEEE HH:mm:ss.SSS" ;
       // 父类类型的引用 变量 指向了 子类类型的对象
       DateFormat df = new SimpleDateFormat( pattern );
       
       Date d = df.parse( source ); // 可能触发 ParseException 异常
       System.out.println( d );
 ?
    }
 ?
 }

 

在 Java 中涉及日期和时间的相关类以及它们之间的转换

原文:https://www.cnblogs.com/zachyoung/p/13039495.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!