Java日期处理


图1
图2

1. java.util.Date

2. java.sql.Date,java.sql.Time,java.sql.TimeStamp

这三个类和java.util.date之间的关系:
在这里插入图片描述
为什么要有java.sql.Date这个类呢?

我们发现除了父类Date在util包下,它的三个子类都是在sql包下的。因为在和数据库打交道时(也就是在执行sql语句时),我们要用到sql包下的时间类,其他情况下我们通常用util包下的Date来格式化日期或者得到当前时间。为什么和数据库打交道时不能用java.util.Date?因为PreparedStatement有三个设置时间的方法:setDate()、setTime()、setTimeStamp(),这三个方法的第二个参数分别是java.sql.Date、java.sql.Time和java.sql.TimeStamp,并没有提供参数是java.util.Date的方法。除此之外,ResultSet也有三个get()方法与之对应,且返回的时间类型也是sql包下的这三个类。

3. java.text.SimpleDateFormat (Date和String相互转化)

(1) 构造方法:

public SimpleDateFormat(String pattern)

参数pattern是描述日期和时间格式的字符串。

(2) Date格式化为字符串:
将对象格式化为字符串。如果该 SimpleDateFormat 对象不能格式化给定的对象则抛IllegalArgumentException

public final String format(Object obj)

(3) 字符串按pattern指定的格式格式化为Date:

public Date parse(String source) throws ParseException

示例:

import java.text.SimpleDateFormat;
import java.util.Date;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        SimpleDateFormat format=new SimpleDateFormat("yyyy--MM--dd HH:mm:ss");
        String str=format.format(new Date());
        System.out.println(str);
 
        Date d=format.parse(str);
        System.out.println(d);
    }
}

运行结果:

2018--10--06 15:17:03
Sat Oct 06 15:17:03 CST 2018

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

日期和时间模式(注意大小写,代表的含义是不同的):
在这里插入图片描述
例子:

SimpleDateFormat format=new SimpleDateFormat("yyyy--MM--dd HH:mm:ss E D a z");
        String str=format.format(new Date());
        System.out.println(str);

        Date d=format.parse(str);
        System.out.println(d);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date start = format.parse("2020-7-1 12:00:00");
        Date end = format.parse("2020-7-2 12:00:00");
        System.out.print(((end.getTime() - start.getTime()) / 1000 / 60));

运行结果:

1440

4. calendar(抽象类)

## Calendar 类常用方法的记录:

4.1 Calendar的实例化方式

首先Calendar是一个抽象类,不能直接实例化,Java提供了静态工厂方法getInstance()来实例化Calendar,或者通过它的子类来实例化

Calendar c=new GregorianCalendar();//直接创建
Calendar c=Calendar.getInstance();//工厂方法

4.2 使用calendar的一个示例

// 创建Calendar类对象
		Calendar objCalendar = Calendar.getInstance();
 
		// 显示日期和时间的各个组成部分
		System.out.println("显示日期和时间的各个组成部分:");
		System.out.println("年:" + objCalendar.get(Calendar.YEAR));
		System.out.println("月:" + objCalendar.get(Calendar.MONTH));
		System.out.println("日:" + objCalendar.get(Calendar.DATE));
		System.out.println("小时:" + objCalendar.get(Calendar.HOUR));
		System.out.println("分钟:" + objCalendar.get(Calendar.MINUTE));
		System.out.println("秒:" + objCalendar.get(Calendar.SECOND));
 
		// 当前时间添加30分钟,然后显示日期和时间
		objCalendar.add(Calendar.MINUTE, 30);
		Date objDate = objCalendar.getTime();
		System.out.println("\n当前时间添加30分钟后的日期和时间:");
		System.out.println(objDate);

执行结果:

显示日期和时间的各个组成部分:
年:2020
月:11
日:5
小时:7
分钟:48
秒:17

当前时间添加30分钟后的日期和时间:
Sat Dec 05 20:18:17 CST 2020
获取时间
    // 使用默认时区和语言环境获得一个日历
    Calendar cal = Calendar.getInstance();
    // 赋值时年月日时分秒常用的6个值,注意月份下标从0开始,所以取月份要+1
    System.out.println("年:" + cal.get(Calendar.YEAR));
    System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));       
    System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
    System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY));
    System.out.println("分:" + cal.get(Calendar.MINUTE));
    System.out.println("秒:" + cal.get(Calendar.SECOND));

今天是 2018 年 2 月 12 日,运行结果:

:2018:2:12:15:57:39

4.3设置时间

DAY_OF_WEEK一周中的第几天,星期日是第一天
月份的下标从 0 开始,设置时同样需要注意,比如我们设置为 2 月 15 日除夕当晚的倒计时的最后一秒: 2018-02-15 23:59:59
可以这样:

  Calendar cal = Calendar.getInstance();
    // 如果想设置为某个日期,可以一次设置年月日时分秒,由于月份下标从0开始赋值月份要-1
    // cal.set(year, month, date, hourOfDay, minute, second);
    cal.set(2018, 1, 15, 23, 59, 59);

或者也可以单个字段一一设置:

 // 或者6个字段分别进行设置,由于月份下标从0开始赋值月份要-1
    cal.set(Calendar.YEAR, 2018);
    cal.set(Calendar.MONTH, Calendar.FEBRUARY);
    cal.set(Calendar.DAY_OF_MONTH, 15);
    cal.set(Calendar.HOUR_OF_DAY, 23);
    cal.set(Calendar.MINUTE, 59);
    cal.set(Calendar.SECOND, 59);
    System.out.println(cal.getTime());

打印的时间结果为:

 Thu Feb 15 23:59:59 CST 2018

时间计算
add方法:
比如在除夕当晚最后一秒,add 一秒:

   Calendar cal = Calendar.getInstance();
    System.out.println(cal.getTime());
    cal.set(2018, 1, 15, 23, 59, 59);
    cal.add(Calendar.SECOND, 1);
    System.out.println(cal.getTime());

打印时间结果如下,日期会自动进入下一天:

  Thu Feb 15 23:59:59 CST 2018
    Fri Feb 16 00:00:00 CST 2018

再比如 1 月 31 号的时候,月份加一,会出现怎样结果:

   Calendar cal = Calendar.getInstance();
    cal.set(2018, 1, 31, 8, 0, 0);
    System.out.println(cal.getTime());
    cal.add(Calendar.MONTH, 1);
    System.out.println(cal.getTime());

运行结果:

Wed Jan 31 08:00:00 CST 2018
Wed Feb 28 08:00:00 CST 2018

说明 add 月份时,会将不存在的日期归为当月日历的最后一天。

7.4常用方法

1.Calendar.getTime():

//返回一个Date对象
Date objDate = Calendar.getTime();

2.Calendar.setTime()

public final void setTime(Date date)

3.获取Calendar的一些私有属性的值

Calendar.get(Calendar.YEAR))
 Calendar.get(Calendar.MONTH))
Calendar.get(Calendar.DATE))
Calendar.get(Calendar.HOUR))
Calendar.get(Calendar.MINUTE))
Calendar.get(Calendar.SECOND))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值