java读取日期时间

获取从1970年1月1日到程序运行时的毫秒数的方法有两种,一种是用date.getTime方法,另一种是System.currentTimeMIllis方法

1.获取日期时间

@Test
    public void test01(){
        //标准时间  UTC 协调时间时
        //GMT 格林威治时间
        Date date = new Date();
        //得到 Fri Apr 15 11:24:05 CST 2022 时间
        System.out.println(date);
        //获取从1970年1月1日起到程序运行时的毫秒数
        long time = date.getTime();
        System.out.println(time);
        //获取从1970年开始到程序运行时的毫秒数
        long millis = System.currentTimeMillis();
        System.out.println(millis);
    }

2.更改日期时间格式 

实例化Date后得到的时间格式Fri Apr 15 11:24:05 CST 2022不符合我们的观看习惯,可以用程序改写提升观看体验

@Test
    public void test02(){
        StringBuffer dateTest = new StringBuffer();
        Date date = new Date();
        int year = date.getYear()+1900; //获取年份
        dateTest.append(year+"年");
        int month = date.getMonth()+1;//方法中用了0-11代表12个月
        dateTest.append(month < 10 ?"0" +month + "月" : month + "月");
        int day =date.getDate();//用getDate不是Day方法,day方法是周几
        dateTest.append(day < 10 ? "0" + day + "日" : day + "日");
        int hour =date.getHours() + 1;
        dateTest.append(hour < 10 ? "0" + hour + "时" : hour + "时");
        int minute = date.getMinutes() + 1;
        dateTest.append(minute < 10 ? "0" + minute + "分" : minute + "分");
        int second = date.getSeconds() + 1;
        dateTest.append(second < 10 ? "0" + second + "秒" :second + "秒");
        String week = "星期";
        int dayOfWeek = date.getDay();
        switch (dayOfWeek){
            case 1 -> week += "一";
            case 2 -> week += "二";
            case 3 -> week += "三";
            case 4 -> week += "四";
            case 5 -> week += "五";
            case 6 -> week += "六";
            default -> week += "日";
        }
        dateTest.append(" " +week);
        System.out.println(dateTest.toString());
        //结果  2022年04月15日12时36分29秒 星期五
    }

先创建一个字符串,然后用date.get方法获取年月日时间小时分钟秒数,通过字符串添加方法加这些内容添加到字符串中去,在月、日、时、分、秒中可能有一位数和两位数共同存在,通过三目运算在一位数前面补0来让格式更完整。

在date.getYear中,获取到的年份是从1900年开始计算的的,获取年份加1900的和才为实际年份。

在获取月、日、时、分、秒方法中,都是从0开始计算的,所以实际数值应该为获取数值+1。

在获取日期时用的为date.getDate方法,而非date.getDay方法,getDay方法为获取星期数的方法,0代表星期日,1-6代表星期一到星期六。

 3.时间模板

@Test
    public void test03(){
        Date date = new Date();
        //结果  Fri Apr 15 11:48:10 CST 2022
        System.out.println(date);
        // 实例化一个时间字符串格式对象 并传入时间字符串模板
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //更改时区
        dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
        //将日期对象根据时间模板格式化为时间字符串
        String format =dateFormat.format(date);
        //结果 2022-04-15 12:48:10
        System.out.println(format);
        String source ="1993-11-06 22:30:00";
        try {
            Date parse = dateFormat.parse(source);
            //结果 Sat Nov 06 21:30:00 CST 1993
            System.out.println(parse);
        }catch (ParseException e){
            throw new RuntimeException(e);
        }
    }

dateFormat.parse方法可能会异常,需要用try{}catch{}方法来写

4.比较时间的前后

@Test
    public void test04(){//比较时间前后
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String text01 = "1983-11-22 20:30:00";
        String text02 = "1988-08-11 20:30:00";
        try {
            //将两个时间字符串变为时间Date
            Date date01 = dateFormat.parse(text01);
            Date date02 = dateFormat.parse(text02);
            boolean isBefore = date01.getTime() - date02.getTime() < 0 ? true : false;
            boolean isAfter = date01.getTime() - date02.getTime() > 0 ? true : false;
            System.out.println(isBefore);  //结果 true
            System.out.println(isAfter);    // 结果  false

            System.out.println(date01.before(date02));   //结果  true
            System.out.println(date01.after(date02));    //结果  false
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

比较时间的前后有两种方法1.将两个时间到1970的时间毫秒差进行比较,毫秒差大的则时间在靠后,毫秒差小的时间靠前。

变量名isBfore确认靠前的,date01的毫秒差 - date02的毫秒差 < 0则 date01靠前返回true。

2.直接用before、after方法进行比较,返回值为布尔型。

5.locale方法快捷获取本地时间

 @Test
    public void test05(){
        Date date = new Date();
        System.out.println(date);
        //输出格林威治日期时间
        String gmtString = date.toGMTString();
        //本地输出日期时间
        String localeString = date.toLocaleString();
        System.out.println(gmtString);
        System.out.println(localeString);
    }

date.toGMTString方法获得格林威治的对应时间

date.toLocaleString方法获得本地时间(适应阅读习惯)

6.更改时区

@Test
    public void test06(){
        //获取默认时区信息 sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null]
        System.out.println(TimeZone.getDefault());
        // 定义时间字符串格式化模板
        SimpleDateFormat tokyoSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 格式化的时候设置时区
        tokyoSdf.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
        // 获取当前时间对象
        Date tokyoDate = new Date();
        // 将当前时间对象使用定义好的时间字符串模板格式化
        String tokyoDateText = tokyoSdf.format(tokyoDate);
        System.out.println(tokyoDateText);
        System.out.println("********");
        SimpleDateFormat NewYorkSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        NewYorkSdf.setTimeZone(TimeZone.getTimeZone("American/New York"));
        Date NewYorkDate = new Date();
        String newYorkDateText = NewYorkSdf.format(NewYorkDate);
        System.out.println(newYorkDateText);
    }

7.时间毫秒数更改时间

@Test
    public void test07(){
        long time = System.currentTimeMillis();//获得1970年1月1日到现在的时间毫秒数
        time -= 1000 * 60 * 60;//减去一小时
        Date date = new Date(time);
        //结果  Fri Apr 15 11:32:37 CST 2022
        System.out.println(date);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
        String format = dateFormat.format(date);
        //结果   2022-04-15 11:32:37
        System.out.println(format);
    }

1秒 =1000毫秒,1分钟=60秒,1小时=60分钟,

time为时间毫秒数,减去1000*60*60即减去一小时


版权声明:本文为tswqezg原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。