Java中的日期时间类详解(Date、DateFormat、Calendar)

07-17 1891阅读

1. Date类

1.1 概述


java.util.Date类表示特定的瞬间,精确到毫秒。Date类的构造函数可以把毫秒值转成日期对象。

继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,我们重点看以下两个构造函数

1.2 Date类构造方法

  • public Date():从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。

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

    tips: 由于中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快8小时的时区,当格林尼治标准时间为0:00时,东八区的标准时间为08:00。

    Java中的日期时间类详解(Date、DateFormat、Calendar)

     利用空参构造可以自动设置当前系统时间的毫秒时刻

     //1.创建对象表示一个时间
            Date d1=new Date();
            System.out.println(d1);

    Java中的日期时间类详解(Date、DateFormat、Calendar)

     利用有参构造指定long类型的构造参数,可以自定义毫秒时刻。例如:

      //2.创建对象表示一个指定的时间
            Date d2=new Date(0L);
            System.out.println(d2);

    Java中的日期时间类详解(Date、DateFormat、Calendar)

    利用setTime修改时间 
    • public void setTime(long time) 把方法参数给定的毫秒值设置给日期对象

      //3.setTime修改时间
              //1000毫秒=1s
              d2.setTime(1000L);
              System.out.println(d2);

      Java中的日期时间类详解(Date、DateFormat、Calendar)

      利用getTime获取时间 

      • public long getTime() 把日期对象转换成对应的时间毫秒值。

         //利用gettime获取时间
                long time = d2.getTime();
                System.out.println(time);

        Java中的日期时间类详解(Date、DateFormat、Calendar)

        tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串,也就是打印的是属性值。

        练习

        Java中的日期时间类详解(Date、DateFormat、Calendar)

        public class timedemo2 {
            public static void main(String[] args) {
              //需求: 打印时间原点开始一年之后的时间
                Date d1 = new Date(0L);
                //获取d1时间的毫秒值
                long time = d1.getTime();
                //在这个基础上我们要加一年的毫秒值
                time+=1000L*60*60*24*365;
                //把计算之后的时间毫秒值再设置回d1当中
                d1.setTime(time);
                System.out.println(d1);
            }
        }
        

        Java中的日期时间类详解(Date、DateFormat、Calendar)

         //需求2:定义2个任意的Date对象,比较一个哪个时间在前
                Date d1 = new Date(Math.abs(r.nextInt()));
                Date d2 = new Date(Math.abs(r.nextInt()));
                long time1 = d1.getTime();
                long time2 = d2.getTime();
                if (time1 > time2) {
                    System.out.println("第一个时间在后面,第二个时间在前面");
                } else if (time1字符串)
           public Date parse(string source) 解析(字符串 ->日期对象)
               */
            public static void main(String[] args) throws ParseException {
                //method01();
                // method2();
                //1.定义一个字符串表示时间
                String str = "2023-11-11 11:11:11";
                //2.利用空参构造创建simpleDateFormat对象
                // 细节:
                //创建对象的格式要跟字符串的格式完全一致
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ");
                Date date = sdf.parse(str);
                //3.打印结果
                System.out.println(date);
            }
            private static void method2() {
                Date d2 = new Date();
                //2.利用带参构造创建simpleDateFormat对象,指定格式
                SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss EE");
                System.out.println(sdf2.format(d2));
            }
            private static void method01() {
                //1.利用空参构造创建simpleDateFormat对象,默认格式
                SimpleDateFormat sdf = new SimpleDateFormat();
                Date d1 = new Date();//当前系统时间
                System.out.println(sdf.format(d1));//打印格式化(日期对象 ->字符串)
                //2024/7/4 下午5:19
            }
        }
        

        Java中的日期时间类详解(Date、DateFormat、Calendar)

        练习1

        package SimpleDateFormat;
        import java.text.ParseException;
        import java.text.SimpleDateFormat;
        import java.util.Date;
        public class SimpleDateFormatdemo2 {
             /*
           public simpleDateFormat() 默认格式
           public simpleDateFormat(String pattern) 指定格式
           public final string format(Date date) 格式化(日期对象 ->字符串)
           public Date parse(string source) 解析(字符串 ->日期对象)
               */
             public static void main(String[] args) throws ParseException {
                 //1.定义一个字符串表示时间
                 String str="2000-11-11";
                 //2.利用空参构造创建simpleDateFormat对象
                 // 细节:
                 //创建对象的格式要跟字符串的格式完全一致
                 SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
                 Date date = sdf1.parse(str);
                 //利用带参构造创建simpleDateFormat对象,指定格式
                 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
                 System.out.println(sdf2.format(date));
             }
        }
        

        Java中的日期时间类详解(Date、DateFormat、Calendar)

        练习2

        Java中的日期时间类详解(Date、DateFormat、Calendar)

         

        package SimpleDateFormat;
        /* 需求:
                    秒杀活动开始时间:2023年11月11日 0:0:0(毫秒值)
                    秒杀活动结束时间:2023年11月11日 0:10:0(毫秒值)
                    小贾下单并付款的时间为:2023年11月11日 0:01:0
                    小皮下单并付款的时间为:2023年11月11日 0:11:0
                    用代码说明这两位同学有没有参加上秒杀活动?
                 */
        import java.text.ParseException;
        import java.text.SimpleDateFormat;
        import java.util.Date;
        public class SimpleDateFormatdemo3 {
            public static void main(String[] args) throws ParseException {
                //1.定义字符串表示三个时间
                String startstr = "2023年11月11日 0:0:0";//600000毫秒=600s
                String endtstr = "2023年11月11日 0:10:0";
                String ordertstr = "2023年11月11日 0:01:0";//6s
                //2.解析上面的三个时间,得到Date对象
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                Date startdate = sdf.parse(startstr);
                Date enddate = sdf.parse(endtstr);
                Date orderdate = sdf.parse(ordertstr);
                //3.获取3个毫秒差
                long starttime = startdate.getTime();
                long endtime = enddate.getTime();
                long ordertime = orderdate.getTime();
               if (ordertime >=starttime&& ordertime 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]