Java日期时间操作

目录

1、Date

1.1、Date( )

1.2、Date(long millisec)

1.3、boolean after(Date date)

1.4、boolean before(Date date)

1.5、int compareTo(Date date)

1.6、long getTime( )

2、SimpleDateFormat

2.1、format格式化

2.2、parse解析,String转Date

3、Calendar

3.1、Calendar类常量

3.2、常用API

3.2.1、int get(int field) 用于获取日历字段的值,返回值是int类型

3.2.2、void set(int field, int value) 将给定的日历字段设置为指定的值

3.2.3、void add(int field, int amount) 可以对指定的一个日历字段进行整数的偏移

1、Date

java.util 包提供了 Date 类来封装当前的日期和时间。

1.1、Date( )

构造函数使用当前日期和时间来初始化对象

1.2、Date(long millisec)

构造函数接收一个参数,该参数是从 1970 年 1 月 1 日 0时0分0秒起的毫秒数

1.3、boolean after(Date date)

若当调用此方法的Date对象在指定日期之后返回true,否则返回false。

1.4、boolean before(Date date)

若当调用此方法的Date对象在指定日期之前返回true,否则返回false。

1.5、int compareTo(Date date)

比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。

1.6、long getTime( )

返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

2、SimpleDateFormat

继承关系:

Java.lang.Object |

        +----java.text.Format |

                +----java.text.DateFormat |

                        +----java.text.SimpleDateFormat

2.1、format格式化

SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd HH:mm E");
SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
SimpleDateFormat format4 = new SimpleDateFormat(
                "一年中的第 D 天 ,第w个星期 ,一个月中第W个星期 ,k时 z时区");
Date now=new Date();
System.out.println(format1.format(now));
System.out.println(format2.format(now));
System.out.println(format3.format(now));
System.out.println(format4.format(now));

1):2022/10/12 14:28 星期三
2):2022-10-12 14:28:47
3):2022年10月12日 14时28分47秒 星期三 
4):一年中的第 285 天 ,第42个星期 ,一个月中第3个星期 ,14时 CST时区

2.2、parse解析,String转Date

注:解析存在解析异常,需要抛出ParseException,即dateStr格式必须和format5格式一致

public static void main(String[] args) throws ParseException {
    String dateStr = "2022-10-12 14:39:39";
    SimpleDateFormat format5 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println(format5.parse(dateStr));
}

console:Wed Oct 12 14:39:39 CST 2022

3、Calendar

3.1、Calendar类常量

Calendar.YEAR表示年份
Calendar.MONTH表示月份,需要加1,因为0表示1月,1表示2月
Calendar.HOUR小时(12小时制)
Calendar.HOUR_OF_DAY一天中第几个小时(24小时制)
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_YEAR一年中第几天
DAY_OF_MONTH
Calendar.DATE
一月中第几天
DAY_OF_WEEK一周中第几天,注意,周日是1,周一是2
Calendar.WEEK_OF_YEAR一年中的星期数,即本年中第几个星期

3.2、常用API

3.2.1、int get(int field) 用于获取日历字段的值,返回值是int类型

Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);

//2022-11-08 17:04:30
System.out.println(cal.get(Calendar.YEAR));//1-返回年份=2022
System.out.println(cal.get(Calendar.MONTH) + 1);//2-返回月份=11
System.out.println(cal.get(Calendar.HOUR_OF_DAY));//3-返回一天中第几个小时=17
System.out.println(cal.get(Calendar.MINUTE));//4-返回分钟=4
System.out.println(cal.get(Calendar.DAY_OF_YEAR));//5-返回一年中第几天=312

3.2.2、void set(int field, int value) 将给定的日历字段设置为指定的值

Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);

//2022-11-08 17:04:30
cal.set(Calendar.YEAR,1992);//设置年份为1992
System.out.println(cal.get(Calendar.YEAR));//返回设置后的年份 = 1992

3.2.3、void add(int field, int amount) 可以对指定的一个日历字段进行整数的偏移


        //2022-11-08 17:20:34
        Date date = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        cal.setTime(date);
        cal.add(Calendar.YEAR,10);//1-当前年份加10年
        System.out.println(sdf.format(cal.getTime()));//返回结果:2032-11-08 17:20:34

        cal.setTime(date);
        cal.add(Calendar.MONTH,10);//2-当前月份加10月
        System.out.println(sdf.format(cal.getTime()));//返回结果:2023-09-08 17:20:34

        cal.setTime(date);
        cal.add(Calendar.HOUR_OF_DAY,10);//3-当前小时加10
        System.out.println(sdf.format(cal.getTime()));//返回结果:2022-11-09 03:20:34

        cal.setTime(date);
        cal.add(Calendar.MINUTE,10);//4-当前分钟加10
        System.out.println(sdf.format(cal.getTime()));//返回结果:2022-11-08 17:30:34

        cal.setTime(date);
        cal.add(Calendar.SECOND,10);//5-当前秒加10
        System.out.println(sdf.format(cal.getTime()));//返回结果:2022-11-08 17:20:44

4、易错集锦

问题分析
1、Java new Date()  Mysql落库之后多了一秒

Java new Date()生成的是时间戳

Mysql 表中时间字段设置的是datetime类型

而datetime类型是会对毫秒四舍五入的

timestamp(时间戳)类型可以避免该问题

2、Mysql date相关类型

1)date :now() = 2023-05-05

2)time :now() = 10:45:45

3)datetime:now() = 2023-05-05 10:45:45

4)timestamp

=》TIMESTAMP时间范围比DATETIME要小很多

=》“1970-01-01 00:00:01”到“2038-01-19 03:14:07”之间

=》UTC表示世界统一时间,也叫作世界标准时间;

=》TIMESTAMP类型最大优点就是可以带有时区属性,因为他的本质就是从毫秒转换而来的,如果你的需求是需要对应不同的国家时区,那么这个类型是个不错的选择

=》TIMESTAMP的标准格式为:YY-MM-DD HH:MM:SS

=》推荐日期类型使用DATETIME,而不是TIMESTAMP

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值