关键词搜索

源码搜索 ×
×

一篇文章带你搞定 Java 中的日期操作类(Date/Calenda/DateFormat/SimpleDateFormat)

发布2020-02-02浏览1326次

详情内容

程序开发中主要使用 java.util 包中的 Date、Calendar 以及 java.text 包中的 SimpleDateFormat。

一、Date 类

Date 类是一个较为简单的操作类,使用直接使用 java.util.Date 类的构造方法并进行输出就可以得到一个完整的日期:

public Date()

    得到系统日期

    import java.util.Date;
    public class Test{
        public static void main(String[] args) {
            Date date = new Date();//实例化 Date 类对象
            System.out.println("当前日期为:" + date);//输出日期
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    这里显示的日期样式并不符合平常看到的格式,要想按照用户自己的格式显示时间可以使用 Calendar 类完成操作。

    二、Calendar 类

    Calendar 本身是一个抽象类,因此必须依靠对象的多态性,通过子类进行父类的实例化操作,Calendar 的子类是 GregorianCalendar 类。

    Calendar 类中的常量:
    在这里插入图片描述
    Calendar 类中提供的方法:
    在这里插入图片描述

    import java.util.Calendar;
    import java.util.GregorianCalendar;
    
    public class Test{
        public static void main(String[] args) {
            Calendar calendar = null;//声明一个 Calendar 对象
            calendar = new GregorianCalendar();//通过子类为其实例化
            System.out.println("年:" + calendar.get(Calendar.YEAR));
            System.out.println("月:" + calendar.get(Calendar.MONTH));
            System.out.println("日:" + calendar.get(Calendar.DAY_OF_MONTH));
            System.out.println("时:" + calendar.get(Calendar.HOUR_OF_DAY));
            System.out.println("分:" + calendar.get(Calendar.SECOND));
            System.out.println("秒:" + calendar.get(Calendar.MILLISECOND));
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    三、DateFormat 类

    为了使显示的格式符合中国人的习惯要求,可以为此类进行格式化操作

    DateFormat 类与 MessageFormat 类都属于 Fromat 类的子类,专门 用于格式化数据使用。

    public abstract class DateFormat extends Fromat
    

      可以看出 DateFormat 类是一个抽象类,所以也无法直接实例化,但是在此抽象类中提供了一个静态方法,可以直接取得本类的实例。
      在这里插入图片描述

      import java.text.DateFormat;
      import java.util.Date;
      
      public class Test{
          public static void main(String[] args) {
              DateFormat df1 = null;//声明 DateFormat 类对象
              DateFormat df2 = null;//声明 DateFormat 类对象
              df1 = DateFormat.getInstance();//取得日期
              df2 = DateFormat.getDateTimeInstance();//取得日期时间
              System.out.println("DATE:" + df1.format(new Date()));//格式化日期
              System.out.println("DATETIME:" + df2.format(new Date()));//格式化日期
          }
      }
      
        2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13

      在这里插入图片描述
      这里虽然显示了时间,但是仍然不是合理的中文格式

      import java.text.DateFormat;
      import java.util.Date;
      import java.util.Locale;
      
      public class Test{
          public static void main(String[] args) {
              DateFormat df1 = null;//声明 DateFormat 类对象
              DateFormat df2 = null;//声明 DateFormat 类对象
              df1 = DateFormat.getDateInstance
                      (DateFormat.YEAR_FIELD,new Locale("zh","CN"));//取得日期,并设置日期显示格式
              df2 = DateFormat.getDateTimeInstance
                      (DateFormat.YEAR_FIELD,DateFormat.ERA_FIELD,new Locale("zh","CN"));//取得日期时间并设置格式
              System.out.println("DATE:" + df1.format(new Date()));//格式化日期
              System.out.println("DATETIME:" + df2.format(new Date()));//格式化日期
          }
      }
      
        2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

      在这里插入图片描述
      这里的日期虽然已经被格式化,但是如果想要得到用户自己定义的日期格式,必须通过 DateFormat 的子类,SimpleDateFormat 类完成

      四、SimpleDateFormat

      日期格式化模板标记:
      在这里插入图片描述在这里插入图片描述
      SimpleDateFormat 类的常用方法:
      在这里插入图片描述

      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      
      public class Test{
          public static void main(String[] args) {
              String strDate = "https://files.jxasp.com/image/2008-10-19 10:11:30.345";//定义日期时间的字符串
      //        准备第一个模板,从字符串中提取数字
              String pat1 = "yyyy-MM-dd HH:mm:ss.SSS";
              //准备第二个模板,将提取后的日期数字变为指定的格式
              String pat2 = "yyyy年MM月dd日HH时mm分ss秒SSS毫秒";
              SimpleDateFormat sdf1 = new SimpleDateFormat(pat1);//实例化模板对象
              SimpleDateFormat sdf2 = new SimpleDateFormat(pat2);//实例化模板对象
              Date d = null;
              try{
                  d = sdf1.parse(strDate);//将给定的字符串中的日期提取出来
              }catch (ParseException e){//如果提供的字符串格式有错误,则进行异常处理
                  e.printStackTrace();
              }
              System.out.println(sdf2.format(d));//将日期变为新的格式
          }
      }
      
        2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22

      在这里插入图片描述
      程序中,首先使用第一个模板将字符串中表示的日期数字取出,也就是实现了 String 向 Date 的转型操作,然后使用第二个模板将这些日期数字重新转化为新的格式表示。

      五、取得完整日期(示例)

      import java.text.SimpleDateFormat;
      import java.util.Date;
      
      class DateTime{
          //声明日期格式化操作对象,直接对new Date() 进行实例化
          private SimpleDateFormat sdf = null;
          //得到完整的日期,格式为:yyyy-MM-dd HH:mm:ss.SSS
          public String getDate(){
              this.sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
              return this.sdf.format(new Date());
          }
          //得到完整的日期,格式为:yyyy年MM月dd月HH时mm分ss秒SSS毫秒
          public String getDateComplete(){
              this.sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒");
              return this.sdf.format(new Date());
          }
          public String getTimestamp(){//得到时间戳:yyyyMMddHHmmssSSS
              this.sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
              return this.sdf.format(new Date());
          }
      }
      
      public class Test{
          public static void main(String[] args) {
              DateTime dt = new DateTime();//实例化 DateTime 对象
              System.out.println("系统日期:" + dt.getDate());
              System.out.println("中文日期:" + dt.getDateComplete());
              System.out.println("时间戳:" + dt.getTimestamp());
          }
      }
      
      
        2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31

      在这里插入图片描述

      相关技术文章

      点击QQ咨询
      开通会员
      返回顶部
      ×
      微信扫码支付
      微信扫码支付
      确定支付下载
      请使用微信描二维码支付
      ×

      提示信息

      ×

      选择支付方式

      • 微信支付
      • 支付宝付款
      确定支付下载