Java日期,日期格式,历法的小总结(菜鸟的我学习Java,欢迎批评指正哦)

package JavaTest;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

public class MyClassTest {
    public static void main(String[] args) {
        System.out.println("这是dateTest==========================================================");
        dateTest();
        System.out.println("");

        System.out.println("这是simpleDateFormatTest==============================================");
        simpleDateFormatTest();
        System.out.println("");

        System.out.println("这是calendarTest======================================================");
        calendarTest();
        System.out.println("");
    }

    /**
     * 日期测试
     */
    static void dateTest() {
        // 目前按照构造器来获得日期的只有这两种方法了,其他的均已过时,最好不用,因为可能是有bug才会丢弃
        Date date = new Date();
        Date date2 = new Date(60000000000000000L);

        System.out.println("date ================== " + date);
        System.out.println("date2 ================== " + date2);

        long time = date.getTime();
        System.out.println("time ====================" + time);

        // 一直获取当前时间:年月日 时分秒
        Instant instant = Instant.now();
        Date time3 = Date.from(instant);
        System.out.println("time3 ====================" + time3);

        /*
         * 比较大小或者相等,b可取值为>0, <0, ==0
         */
        int b = date.compareTo(date2);
        int b2 = date.compareTo(time3);
        System.out.println("b ====================" + b);
        System.out.println("b2 ====================" + b2);
    }

    /**
     * 日期格式测试
     */
    static void simpleDateFormatTest() {

        String instant = "2016年07月25日 14时29分29秒";// 我们自己弄一个日期字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时dd分mm秒");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd HH:dd:mm");

        try {
            // 1.将字符串转为日期时,字符串格式一定要和SimpleDateFormat的格式一致,否则报异常
            // 2.这也就是说,通过SimpleDateFormat,你可以将任意格式的日期字符串转化为日期,但是要注意第1条
            Date date = sdf.parse(instant);
            // 发现没有?这其实是另外一种获得日期实例的方法,通过格式化你自己的日期字符串获取日期
            System.out.println("date ====================" + date);

            // 3.而对于一个日期,你可以将其转为任意格式的字符串日期
            // 目前我只发现日期格式不能用英文连接,只要是特殊字符(中文属于特殊字符)就可以连接
            String dateString = sdf2.format(date);
            System.out.println("dateString ====================" + dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    /**
     * 历法测试,jdk1.1之后建立使用历法获取日历,在这个测试中会提到怎么获取
     */
    static void calendarTest() {
        // 1.由于Calendar是一个抽象类,所以使用子类构造器获取的,这是获取罗马历法的日历
        Calendar calendar = new GregorianCalendar();
        // 2.或者单例获取,默认获取历法,也可以使用有参方法指定你想要的历法
        // 这个单例方法有很多重载,你可以根据自己的需要来选择
        Calendar calendar2 = Calendar.getInstance(Locale.CHINA);

        // 获取指定字段值,获取年份
        int year = calendar2.get(Calendar.YEAR);
        System.out.println("获取年份 ====================" + year);
        // 获取月份,月份0-11
        int month = calendar2.get(Calendar.MONTH);
        System.out.println("获取月份 ====================" + month);
        // 获取天份
        int day = calendar2.get(Calendar.DAY_OF_MONTH);
        System.out.println("获取天份 ====================" + day);
        // 指示当前月中的第几个星期
        int dayOfWeekInMonth = calendar2.get(Calendar.DAY_OF_WEEK_IN_MONTH);
        System.out.println("指示当前月中的第几个星期 ====================" + dayOfWeekInMonth);
        // 获取小时
        int hour = calendar2.get(Calendar.HOUR);
        System.out.println("获取小时 ====================" + hour);
        // 获取分钟
        int minute = calendar2.get(Calendar.MINUTE);
        System.out.println("获取分钟 ====================" + minute);
        // 获取秒
        int millisecond = calendar2.get(Calendar.MILLISECOND);
        System.out.println("获取秒 ====================" + millisecond);
        // 获取当前月中的星期数
        int week = calendar2.get(Calendar.WEEK_OF_MONTH);
        System.out.println("获取获取周 ====================" + week);
        // 获取星期一
        int monday = calendar2.get(Calendar.MONDAY);
        System.out.println("获取星期一 ====================" + monday);
        /*
         * 请注意,这里面的这些字段都是通用的,不需要你自己另外指定新的字段或者get()里面放你自己的参数
         */

        // 第四种获取日期实例的方法:获得表示相同时间的 Date类型实例,jdk1.1之后提倡通过历法获得Date实例
        Date date = calendar2.getTime();
        String instant = "2016-06-07 16:22:22";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:dd:mm");
        Date date2 = null;
        try {
            date2 = sdf.parse(instant);
            // 设置指定的时间
            calendar2.setTime(date2);
            Date date3 = calendar2.getTime();
            System.out.println("获取自定义设置后重新生成的日期 ====================" + date3);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String dateString = sdf.format(date);
        System.out.println("查看自定义设置后重新生成的日期字符串格式 ====================" + dateString);

        // 修改指定字段的值
        calendar2.set(Calendar.YEAR, 2019);
        int year2 = calendar2.get(Calendar.YEAR);
        System.out.println("获取设置后生成的年份====================" + year2);

        // 设置年月入时分秒,也可以适当减少部分参数,按要求设置
        calendar2.set(2077, 10, 30, 12, 12, 12);
        int year3 = calendar2.get(Calendar.YEAR);
        System.out.println("获取获取另一种方法设置后生成的年份 ====================" + year3);

        // 在指定字段上添加一个值
        calendar2.add(Calendar.MONTH, 1);
        int month2 = calendar2.get(Calendar.MONTH);
        System.out.println("获取添加后生成的月份 ====================" + month2);

        // add方法与roll方法的区别
        // add方法会改变更大的值,比如增加月份超过12了,年份就会跳到下一年,即add会改变更大一级的值
        // roll方法则不然,就算月份回滚超过12了,年份也还是在本年度中,只是月份会改变,即回滚不会改变更大一级的值
        calendar2.add(Calendar.MONTH, 15);
        int yearAdd = calendar2.get(Calendar.YEAR);
        // 这里的月份会增加到2079
        System.out.println("增加月份后的年份 ====================" + yearAdd);

        calendar2.roll(Calendar.MONTH, +15);
        int yearRoll = calendar2.get(Calendar.YEAR);
        // 按道理这里的月份会增加到2081,但是由于回滚不增加更大一级的值,所以年份依然是2079
        System.out.println("回滚月份后的年份 ====================" + yearRoll);

        // 其他的历法API都是见名知义的方法了,不需要意义解释了
        // 解释一下getActualMaximum,getActualMinimum,getMaximum,getMinimum
        // 返回月份中的最大天数
        int monthRoll = calendar2.get(Calendar.MONTH);// 返回值是5,说明是六月份
        System.out.println("获取回滚后的月份 ====================" + monthRoll);

        // 返回当前月:6月份的最大天数
        int maxMonth = calendar2.getActualMaximum(Calendar.DATE);
        int maxMonth2 = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.println("获取月份中最大值 ====================" + maxMonth);// 30
        System.out.println("获取月份中最大值2 ====================" + maxMonth2);// 30

        // 返回月份的最大天数
        int maxMonthNum = calendar2.getMaximum(Calendar.DATE);// 31
        int maxMonthNUm2 = calendar2.getMaximum(Calendar.DAY_OF_MONTH);// 31
        System.out.println("获取月份中最大值 ====================" + maxMonthNum);
        System.out.println("获取月份中最大值2 ====================" + maxMonthNUm2);

        // 这里可以看出getActualMaximum返回的是当前的实际数值
        // 而getMaximum返回的是可能的最大值
        // 对应的getActualMinimum,getMinimum也是一样的
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值