Java 日期时间类,日期时间格式化,Calendar类(日历)常用方法详解

喜欢ヅ旅行 2023-07-25 08:41 66阅读 0赞

Date类

使用Date类我们需要先了解一些常识:
Date类表示特定的时间,精确到毫秒1/1000秒

要对时间和日期进行计算,需要转换成毫秒值进行计算 计算后再把毫秒转换为日期(毫秒值表示1970年1月1日00:00:00.000 GMT之后的毫秒数。 )

1.把日期转换成毫秒
步骤:
1.获取当前日期:2020/4/13

2.时间原点:1970年1月1日00:00:00.000 英国格林威治

System.currentTimeMillis() 获取当前系统一共到1970年1月1日00:00:00.000 经历了多少毫秒

注意:中国输入东8 区,会把时间增加8个小时 1970年1月1日08:00:00.000

2.将毫秒转换成日期
1天 = 246060 = 86400秒 = 86400*1000 86400000毫秒

常用构造方法

Date类的空参数构造方法 Date() 获取当前系统的日期和时间

Date类的带参数构造方法 Date(long date) 传递毫秒值,把毫秒值转换成Date日期

long getTime() 把日期转换成毫秒相当于System.currentTimeMillis()方法

  1. public class Demo02 {
  2. public static void main(String[] args) {
  3. demo01();
  4. demo02();
  5. demo03();
  6. }
  7. //Date类的空参数构造方法 Date() 获取当前系统的日期和时间
  8. private static void demo01() {
  9. Date date = new Date();
  10. System.out.println(date);//Mon Apr 13 10:20:40 CST 2020
  11. }
  12. //Date类的带参数构造方法 Date(long date) 传递毫秒值,把毫秒值转换成Date日期
  13. private static void demo02() {
  14. Date date = new Date(1586743602927L);
  15. System.out.println(date);//Mon Apr 13 10:06:42 CST 2020
  16. }
  17. //long getTime() 把日期转换成毫秒相当于System.currentTimeMillis()方法
  18. //返回自1970年 1 月1日00:00:00 GMT以来此Date对象表示的毫秒值
  19. private static void demo03() {
  20. Date date = new Date(); //获取当前系统时间
  21. long time = date.getTime();
  22. System.out.println(time);//1586745118748
  23. }
  24. }

日期时间格式化

我们得到的时间一般都是英文状态的一个Date数据,那么我们如何才能将获取到的时间转换成我们希望的字符串格式呢,这就需要使用日期时间的格式化

DateFormat(日期格式化)类

(ps:注意:java.text.DateFormat 是日期/时间格式化子类的抽象类 抽象类我们不能直接调用,所以我们可以查看子类java.text.SimpleDateFormat 的方法)

通过这个类可以帮我们完成日期和文本之间的转换,也就是在Date对象与String对象之间进行来回转换

格式化:日期-》文本
format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串
解析: 文本-》日期
parse(String source) 把符合模式的字符串,解析为Date日期

因为DateFormat是一个抽象类,所以我们不能直接调用,这里可以使用它的子类
java.text.SimpleDateFormat

关系:java.text.SimpleDateFormat extends DateFormat

SimpleDateFormat构造方法:

SimpleDateFormat(String pattern):
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat

参数:String pattern :传递指定的模式
写对应的模式,会把模式替换成对应的日期和时间
“yyy-MM-dd HH:mm:ss”
注意:模式中的字母与不能改变,连接模式的符号可以改变
“yyy年MM月dd日 HH时mm分ss秒”

常用的指定模式

  1. y :年
  2. M :月
  3. d :日
  4. H :时
  5. m :分
  6. s :秒

那么我们如何利用其构造模式,进行日期的格式化及解析呢

1.使用DateFormat类中的方法 format,把日期格式化为文本

1.创建SimpleDateFormat对象,构造方法中传递指定的模式

  1. SimpleDateFormat simple = new SimpleDateFormat("yyy年MM月dd日 HH时mm分ss秒");

2.调用SimpleDateFormat对象中的方法format 按照构造方法中指定的模式,把Date日期格式化为符合模式的文本

  1. String str = simple.format(date);

完整的代码:

  1. private static void demo01() {
  2. Date date = new Date(); //获取一个系统时间
  3. //1.创建SimpleDateFormat对象,构造方法中传递指定的模式
  4. SimpleDateFormat simple = new SimpleDateFormat("yyy年MM月dd日 HH时mm分ss秒");
  5. //2.调用SimpleDateFormat对象中的方法format 按照构造方法中指定的模式,把Date日期格式化为符合模式的文本
  6. String str = simple.format(date); //format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串
  7. System.out.println(str);//2020年04月13日 11时20分37秒
  8. }

2.使用DateFormat类中的方法parse,把字符串,解析为Date日期

1.创建SimpleDateFormat对象,构造方法中传递指定的模式

  1. SimpleDateFormat simple = new SimpleDateFormat("yyy年MM月dd日 HH时mm分ss秒");

2.调用SimpleDateFormat对象中的方法parse 按照构造方法中指定的模式,格式化为Date日期

  1. Date date = simple.parse(string);

注意:
parse方法声明了一个异常,如果字符串和构造方法模式不一致,那么程序就会抛出异常
调用一个抛出异常的方法,就必须处理这个异常,要么继续抛出异常throws 要么try catch 自己处理

完整的代码

  1. private static void demo02(String string) throws ParseException {
  2. //1.创建SimpleDateFormat对象,构造方法中传递指定的模式
  3. SimpleDateFormat simple = new SimpleDateFormat("yyy年MM月dd日 HH时mm分ss秒");
  4. //2.调用SimpleDateFormat对象中的方法parse 按照构造方法中指定的模式,格式化为Date日期
  5. Date date = simple.parse(string);
  6. System.out.println(date);//Mon Apr 13 11:43:15 CST 2020
  7. }

Calendar类(日历)

java.util.Calendar 是日历类,在Date之后替换了很多Date的方法

Calendar类是一个抽象类,里面提供了很多操作日历字段的方法(YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等)

Calendar类无法直接创建对象使用,里面有一个静态方法getInstance();该方法返回了Calendar类的子类对象

成员方法:
static Calendar getInstance()

使用默认时区和区域设置获取日历。

  1. Calendar calendar = Calendar.getInstance();//多态
  2. System.out.println(calendar);
  3. public class Demo01 {
  4. public static void main(String[] args) {
  5. Calendar calendar = Calendar.getInstance();//多态
  6. System.out.println(calendar);
  7. }
  8. }

输出值:java.util.GregorianCalendar[time=1586760906416,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=2020,MONTH=3,WEEK_OF_YEAR=16,WEEK_OF_MONTH=3,DAY_OF_MONTH=13,DAY_OF_YEAR=104,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=55,SECOND=6,MILLISECOND=416,ZONE_OFFSET=28800000,DST_OFFSET=0]

日历类的几个常用方法;

常用成员方法的参数:

  1. int field :日历类的字段,可以使用Calendar类的静态成员变量获取
  2. * public static final int YEAR =1 :年
  3. * public static final int MONTH =2 :月
  4. * public static final int DATE =5 :月中的某一天
  5. * public static final int DAY_OF_MONTH =5; 月中的某一天
  6. * public static final int HOUR =10
  7. * public static final int MINUTE =12
  8. * public static final int SECONE =13

1.public int get(int field):返回给定日历字段的值

//public int get(int field):返回给定日历字段的值
//参数传入给定的日历字段(YEAR,MONTH)
//返回值:日历字段代表的具体的值

  1. private static void demo01() {
  2. //使用getInstance方法获取日历对象
  3. Calendar calendar = Calendar.getInstance();
  4. int year = calendar.get(Calendar.YEAR);
  5. System.out.println(year);//2020
  6. int month =calendar.get(Calendar.MONTH);
  7. System.out.println(month);//3 返回的西方月份 0-11 东方的是1-12 需要转换的话可以加1
  8. // int day = calendar.get(Calendar.DATE);
  9. int day = calendar.get(Calendar.DAY_OF_MONTH); //和上面一样
  10. System.out.println(day);//13
  11. }

2.public void set(int field , int value) 将给定的日历字段设置为给定值
参数:
1.int field:传入给定的日历字段(YEAR,MONTH)
2.int value:给指定的字段设置对应的值

  1. private static void demo02() {
  2. //使用getInstance方法获取日历对象
  3. Calendar calendar= Calendar.getInstance();
  4. //设置时间为9999年
  5. calendar.set(Calendar.YEAR,9999);
  6. //设置月为9月
  7. calendar.set(Calendar.MONTH, 9);
  8. //设置日为9日
  9. calendar.set(Calendar.DATE, 9);
  10. //同时设置年月日set的重载方法
  11. calendar.set(9999, 9, 9);
  12. int year = calendar.get(Calendar.YEAR);
  13. System.out.println(year);//9999
  14. int month =calendar.get(Calendar.MONTH);
  15. System.out.println(month);//9 返回的西方月份 0-11 东方的是1-12 需要转换的话可以加1
  16. int day = calendar.get(Calendar.DAY_OF_MONTH); //和上面一样
  17. System.out.println(day);//9
  18. }

3.public abstract void add(int field , int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量

1.int field:传入给定的日历字段(YEAR,MONTH)

  1. int amount:增加减少指定的值 正数增加 负数减少

    private static void demo03() {

    1. Calendar calendar= Calendar.getInstance();
    2. //年增加10年
    3. calendar.add(Calendar.YEAR, 10);
    4. int year = calendar.get(Calendar.YEAR);
    5. System.out.println(year);//2030
    6. //月减少3个月
    7. calendar.add(Calendar.MONTH, -3);
    8. int month = calendar.get(Calendar.MONTH);
    9. System.out.println(month); //0
    10. }

4.public Date getTime(): 返回一个表示此Calendar时间量(从历元到现在的毫秒偏移量)的Date对象。
把日历对象转换成日期对象

  1. private static void demo04() {
  2. Calendar calendar=Calendar.getInstance();
  3. Date date = calendar.getTime();
  4. System.out.println(date);//Mon Apr 13 15:44:46 CST 2020
  5. }

发表评论

表情:
评论列表 (有 0 条评论,66人围观)

还没有评论,来说两句吧...

相关阅读