• 32、Java高级特性——日期操作类、Date类、SimpleDateFormat类、Calendar类


    目录

    一、日期操作类

    二、Date类

    1、Date类中的构造方法

    2、获取系统当前时间

    三、SimpleDateFormat类

    1、SimpleDateFormat类中的构造方法 

    2、format(Date date,StringBuffer toAppendTo,FieldPosition pos)方法

    四、Calendar类 

    1、Calendar类中的构造方法

    2、Calendar类中的字段名 

    3、Calendar类中的常用方法及代码

    3.1 getInstance()方法 

    3.2 get()方法

    4、参考代码


    一、日期操作类

    (1)java.util包中提供的和日期相关的类常见有:

                  Date类        Calendar类        DateFormat类        SimpleDateFormat

    (2)在JDK 1.1之间,Date允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的API不易于实现国际化。从JDK 1.1开始,使用Calendar类实现日趋和时间字段之间的转化,使用DataFormat类来格式化和解析日期字符串。

    二、Date类

    java.util.Date类:表示日期和时间

            提供操作日期和时间各组成部分的方法,类 Date 表示特定的瞬间,精确到毫秒

    1、Date类中的构造方法

     只需要看一下无参构造方法就行了,其他的已经过时了 

    2、获取系统当前时间

    1. public static void main(String[] args) {
    2. //创建Date类对象
    3. Date date = new Date();
    4. //获取系统当前时间
    5. System.out.println("系统当前时间:"+date);
    6. }

        

    三、SimpleDateFormat类

    (1)SimpleDateFormat类是java.text包中的类,是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。 

    (2)SimpleDateFprmat类使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过DateFormat中的getTimeInstance、getDateInstance或getDateTimeInstance来创建日期-时间格式器。每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式器。可以根据需要使用applyPattern方法来修改格式模式。

     

    1、SimpleDateFormat类中的构造方法 

    2、format(Date date,StringBuffer toAppendTo,FieldPosition pos)方法

    将给定的Date格式化为日期/时间字符串,并将结果添加到给定的StringBuffer

    1. import java.text.SimpleDateFormat;
    2. import java.util.Date;
    3. public class SimpleDateFormatDemo01 {
    4. public static void main(String[] args) {
    5. //创建Date类对象
    6. Date date = new Date();
    7. //创建SimpleDateFormat类对象,设置格式
    8. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E 是今年的第D天");
    9. String time1 = sdf.format(date);
    10. System.out.println("现在的时间是:"+time1);
    11. }
    12. }

     

    四、Calendar类 

    Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

    1、Calendar类中的构造方法

    2、Calendar类中的字段名 

    Calendar类中的字段都是静态的,可通过类名直接调用。

     

    3、Calendar类中的常用方法及代码

    Calendar类是一个抽象类,是不能创建对象的,

    所以可以通过Calendar类中的getInstance()方法获取一个当前日历,把它赋值给一个Calendar类的引用,可通过引用变量调用get()方法获取日历中的字段值

    3.1 getInstance()方法 

    使用默认时区和语言环境获取一个日历

    1. public static void main(String[] args) {
    2. //直接创建一个Calendar类对象是创建不了的,因为Calendar类是一个抽象类
    3. //getInstance():使用默认时区和语言环境获得一个日历
    4. Calendar cal = Calendar.getInstance();
    5. System.out.println(cal);
    6. }

    控制台输出为:

    java.util.GregorianCalendar[time=1670313949634,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=6,DAY_OF_YEAR=340,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=5,SECOND=49,MILLISECOND=634,ZONE_OFFSET=28800000,DST_OFFSET=0]
    

    3.2 get()方法

    返回日历给定字段的值 

    (1)获取年份

    1. public static void main(String[] args) {
    2. //通过getInstance日历
    3. Calendar cal = Calendar.getInstance();
    4. System.out.println(cal);
    5. //get() 方法:返回日历中给定的字段值
    6. //获取年份
    7. int year = cal.get(Calendar.YEAR);
    8. System.out.println(year);
    9. }

    (2) 获取月份

    指示月份的 getset 的字段数字。这是一个特定于日历的值。在格里高利历和罗马儒略历中一年中的第一个月是 JANUARY,它为 0;最后一个月取决于一年中的月份数。

    所以我们要想获取当前的月份需要把获得的日历月份加1

    1. public static void main(String[] args) {
    2. //通过getInstance日历
    3. Calendar cal = Calendar.getInstance();
    4. System.out.println(cal);
    5. //get() 方法:返回日历中给定的字段值
    6. //获取月份
    7. int month = cal.get(Calendar.MONTH)+1;
    8. System.out.println(month);
    9. }

    (3) 获取日

    1. public static void main(String[] args) {
    2. //通过getInstance日历
    3. Calendar cal = Calendar.getInstance();
    4. System.out.println(cal);
    5. //get() 方法:返回日历中给定的字段值
    6. //获取日
    7. int day1 = cal.get(Calendar.DAY_OF_MONTH);//本月的第几天
    8. System.out.println(day1);
    9. int day2 = cal.get(Calendar.DAY_OF_WEEK);//本周的第几天(周日是第一天,所以实际周几+1)
    10. System.out.println(day2);
    11. int day3 = cal.get(Calendar.DAY_OF_WEEK_IN_MONTH);//今天是本月的第几周
    12. System.out.println(day3);
    13. int day4 = cal.get(Calendar.DAY_OF_YEAR);//今天是今年的第多少天
    14. System.out.println(day4);
    15. }

    (4) 获取时

    1. public static void main(String[] args) {
    2. //通过getInstance日历
    3. Calendar cal = Calendar.getInstance();
    4. System.out.println(cal);
    5. //get() 方法:返回日历中给定的字段值
    6. //获取时
    7. int hour1 = cal.get(Calendar.HOUR);//十二小时制
    8. System.out.println(hour1);
    9. int hour2 = cal.get(Calendar.HOUR_OF_DAY);//现在是一天中的第几个小时(二十四小时制)
    10. System.out.println(hour2);
    11. }

    (5)获取分

    1. public static void main(String[] args) {
    2. //通过getInstance日历
    3. Calendar cal = Calendar.getInstance();
    4. System.out.println(cal);
    5. //get() 方法:返回日历中给定的字段值
    6. //获取分
    7. int minute = cal.get(Calendar.MINUTE);
    8. System.out.println(minute);
    9. }

    (6)获取分

    1. public static void main(String[] args) {
    2. //通过getInstance日历
    3. Calendar cal = Calendar.getInstance();
    4. System.out.println(cal);
    5. //get() 方法:返回日历中给定的字段值
    6. //获取秒
    7. int second = cal.get(Calendar.SECOND);
    8. System.out.println(second);
    9. }

    (7)获取星期几的两种方法

    系统默认每周是从周日开始的,周日为每周的第一天,Calendar.DAY_OF_WEEK返回的是本周的第几天,而我们通常表示为"星期二",是字符串类型,我们可以通过以下两种方法实现

    第一种方法:switch选择结构

    1. public static void main(String[] args) {
    2. Calendar cal = Calendar.getInstance();
    3. //switch分支结构实现输出星期几
    4. int weekday = cal.get(Calendar.DAY_OF_WEEK);
    5. String weekDay ="";
    6. switch(weekday){
    7. case 1:
    8. weekDay = "星期日";
    9. break;
    10. case 2:
    11. weekDay ="星期一";
    12. break;
    13. case 3:
    14. weekDay = "星期二";
    15. break;
    16. case 4:
    17. weekDay = "星期三";
    18. break;
    19. case 5:
    20. weekDay = "星期四";
    21. break;
    22. case 6:
    23. weekDay = "星期五";
    24. break;
    25. case 7:
    26. weekDay = "星期六";
    27. }
    28. System.out.println("今天是:"+weekDay);
    29. }

    第二种方法:数组 

    1. public static void main(String[] args) {
    2. Calendar cal = Calendar.getInstance();
    3. //数组实现输出星期几
    4. int weekday = cal.get(Calendar.DAY_OF_WEEK);
    5. String[] weekDay = {"","星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
    6. System.out.println("今天是:"+weekDay[weekday]);
    7. }

    4、参考代码

    1. public static void main(String[] args) {
    2. //通过getInstance日历
    3. Calendar cal = Calendar.getInstance();
    4. System.out.println(cal);
    5. //get() 方法:返回日历中给定的字段值
    6. //获取年份
    7. int year = cal.get(Calendar.YEAR);
    8. System.out.println(year);
    9. //获取月份
    10. int month = cal.get(Calendar.MONTH)+1;
    11. System.out.println(month);
    12. //获取日
    13. int day1 = cal.get(Calendar.DAY_OF_MONTH);//本月的第几天
    14. System.out.println(day1);
    15. int day2 = cal.get(Calendar.DAY_OF_WEEK);//本周的第几天(周日是第一天,所以实际周几+1)
    16. System.out.println(day2);
    17. int day3 = cal.get(Calendar.DAY_OF_WEEK_IN_MONTH);//今天是本月的第几周
    18. System.out.println(day3);
    19. int day4 = cal.get(Calendar.DAY_OF_YEAR);//今天是今年的第多少天
    20. System.out.println(day4);
    21. //获取时
    22. int hour1 = cal.get(Calendar.HOUR);//十二小时制
    23. System.out.println(hour1);
    24. int hour2 = cal.get(Calendar.HOUR_OF_DAY);//现在是一天中的第几个小时(二十四小时制)
    25. System.out.println(hour2);
    26. //获取分
    27. int minute = cal.get(Calendar.MINUTE);
    28. System.out.println(minute);
    29. //获取秒
    30. int second = cal.get(Calendar.SECOND);
    31. System.out.println(second);
    32. //获取星期几
    33. int weekday = cal.get(Calendar.DAY_OF_WEEK);
    34. System.out.println(weekday);
    35. String weekDay ="";
    36. switch(weekday){
    37. case 1:
    38. weekDay = "星期日";
    39. break;
    40. case 2:
    41. weekDay ="星期一";
    42. break;
    43. case 3:
    44. weekDay = "星期二";
    45. break;
    46. case 4:
    47. weekDay = "星期三";
    48. break;
    49. case 5:
    50. weekDay = "星期四";
    51. break;
    52. case 6:
    53. weekDay = "星期五";
    54. break;
    55. case 7:
    56. weekDay = "星期六";
    57. }
    58. System.out.println("现在是:"+year+"年"+month+"月"+day1+"日\t"+hour2+"点"+minute+"分"+second+"秒\t"+weekDay);
    59. System.out.println("今天是今年的第"+day4+"天");
    60. System.out.println("本周是今年的第"+cal.get(Calendar.WEEK_OF_YEAR)+"周");
    61. }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    openstack搭建
    SpringBoot整合Groovy脚本,实现动态编程
    技术对比:Flutter vs. 传统桌面应用开发框架
    跨路由器路由设置
    从机器语言到现代编程语言的飞跃
    抖音开发对接之订单取消消息
    学编程的第二十二天
    Redis快速入门
    Matlab图像处理-三原色
    数据结构与算法:括号生成
  • 原文地址:https://blog.csdn.net/CSDN_Loveletter/article/details/128036997