时间戳-JAVA日期工具类Date()与Calendar()

1.时间戳概念        

        时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,本质是一个long类型的整数,表示日期对象。java 体系的时间戳是毫秒。

2.Date()类

        Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小 时、分、秒、年。

Date 类有如下两个构造方法。

Date date1 = new Date(); // 调用无参数构造函数

System.out.println(date1.toString()); // 输出:Wed May 18 21:24:40 CST 2016

Date date2 = new Date(60000); // 调用含有一个long类型参数的构造函数 System.out.println(date2); // 输出:Thu Jan 0108:01:00 CST 1970

  • Date():此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使 用该构造方法创建的对象可以获取本地的当前时间。
  • Date(long date):此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开 始经过参数 date 指定的毫秒数。

        Date 类的无参数构造方法获取的是系统当前的时间,显示的顺序为星期、月、日、小时、分、秒、年。

        Date 类带 long 类型参数的构造方法获取的是距离 GMT 指定毫秒数的时间,60000 毫秒是一分钟,而GMT(格林尼治标准时间)与 CST(中央标准时间)相差 8 小时,也就是说 1970 年 1 月 1 日 00:00:00GMT 与 1970 年 1 月 1 日 08:00:00 CST 表示的是同一时间。 因此距离 1970 年 1 月 1 日 00:00:00 CST 一分钟的时间为 1970 年 1 月 1 日 00:01:00 CST,即使用 Date 对象表示为 Thu Jan 01 08:01:00 CST 1970。

方法描述
boolean after(Date when)判断此日期是否在指定日期之后
boolean before(Date when)判断此日期是否在指定日期之前
int compareTo(Date anotherDate)比较两个日期的顺序
boolean equals(Object obj)比较两个日期的相等性
long getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来,此 Date 对象表示的毫秒数
String toString()把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。 其 中 dow 是一周中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及 Sat)

Date类处理日期时间的实例如下:

/*
 * Copyright (c) 2020, 2023, suicer All rights reserved.
 *
 */

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * <p>Project: day0708 - ZhanTie
 * <p>Powered by suicer On 2023-07-08 15:54:35
 * <p>Created by IntelliJ IDEA
 *
 * @author suicer [suicer@QQ2130949006]
 * @version 1.0
 * @since 1.8
 */
public class ZhanTie {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 将字符串转化为日期
        Date date = null;
        try {
            date = sdf.parse("2000-11-11 11:11:11");
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        System.out.println(date);
        Date date = new Date();
        // 将日期转化为字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String str = sdf.format(date);
        System.out.println(str);
        var now = new Date(); // 创建一个Date对象,获取当前时间
        // 指定格式化格式
        var f = new SimpleDateFormat("今天是 " + "yyyy 年 MM 月 dd 日 E HH 点 mm 分 ss 秒");
        System.out.println(f.format(now)); // 将当前时间格式化为指定的格式
    }
}

3.Calendar类

        Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。

        创建 Calendar 对象不能使用 new 关键字,因为 Calendar 类是一个抽象类,但是它提供了一个 getInstance() 方法来获得 Calendar类的对象。getInstance() 方法返回一个 Calendar 对象,其日历字段已 由当前日期和时间初始化。

Calendar c = Calendar.getInstance();

        当创建了一个 Calendar 对象后,就可以通过 Calendar 对象中的一些方法来处理日期、时间。

方法描述
void add(int field, int amount)根据日历的规则,为给定的日历字段 field 添加或减去指定的时间 量 amount
boolean after(Object when)判断此 Calendar 表示的时间是否在指定时间 when 之后,并返回 判断结果
boolean before(Object when)判断此 Calendar 表示的时间是否在指定时间 when 之前,并返回 判断结果
void clear()清空 Calendar 中的日期时间值
int compareTo(Calendar anotherCalendar)比较两个 Calendar 对象表示的时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0
int get(int field)返回指定日历字段的值
int getActualMaximum(int field)返回指定日历字段可能拥有的最大值
int getActualMinimum(int field)返回指定日历字段可能拥有的最小值
int getFirstDayOfWeek()获取一星期的第一天。根据不同的国家地区,返回不同的值
static Calendar getInstance()使用默认时区和语言坏境获得一个日历
static Calendar getInstance(TimeZone zone)使用指定时区和语言环境获得一个日历
Date getTime()返回一个表示此 Calendar 时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量)的 Date 对象
long getTimeInMillis()返回此 Calendar 的时间值,以毫秒为单位
void set(int field, int value)为指定的日历字段设置给定值
void set(int year, int month, int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay, int minute, int second)设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value)设置一星期的第一天是哪一天
void setTimeInMillis(long millis)用给定的 long 值设置此 Calendar 的当前时间值

        Calendar 对象可以调用 set() 方法将日历翻到任何一个时间,当参数 year 取负数时表示公元。Calendar 对象调用 get() 方法可以获取有关年、月、日等时间信息,参数 field 的有效值由 Calendar 静态常 量指定。

  • Calendar 类中定义了许多常量,分别表示不同的意义。
  • Calendar.YEAR:年份。
  • Calendar.MONTH:月份。
  • Calendar.DATE:日期。
  • Calendar.DAY_OF_MONTH:日期,和上面的字段意义完全相同。
  • Calendar.HOUR:12小时制的小时。
  • Calendar.HOUR_OF_DAY:24 小时制的小时。
  • Calendar.MINUTE:分钟。
  • Calendar.SECOND:秒。
  • Calendar.DAY_OF_WEEK:星期几。

        例如,要获取当前月份可用如下代码:

 int month = Calendar.getInstance().get(Calendar.MONTH);

        如果整型变量 month 的值是 0,表示当前日历是在 1 月份;如果值是 11,则表示当前日历在 12 月 份。 使用 Calendar 类处理日期时间的实例如下:

/*
 * Copyright (c) 2020, 2023, suicer All rights reserved.
 *
 */

import java.util.Calendar;
import java.util.Date;

/**
 * <p>Project: day0708 - ZhanTie
 * <p>Powered by suicer On 2023-07-08 15:54:35
 * <p>Created by IntelliJ IDEA
 *
 * @author suicer [suicer@QQ2130949006]
 * @version 1.0
 * @since 1.8
 */
public class ZhanTie {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(); // 如果不设置时间,则默认为当前时间
        calendar.setTime(new Date()); // 将系统当前时间赋值给 Calendar 对象
        System.out.println("现在时刻:" + calendar.getTime()); // 获取当前时间
        int year = calendar.get(Calendar.YEAR); // 获取当前年份
        System.out.println("现在是" + year + "年");
        int month = calendar.get(Calendar.MONTH) + 1; // 获取当前月份(月份从 0 开始,所以加1)
        System.out.print(month + "月");
        int day = calendar.get(Calendar.DATE); // 获取日
        System.out.print(day + "日");
        int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 获取今天星期几(以星期日为第一天)
        System.out.print("星期" + week);
        int hour = calendar.get(Calendar.HOUR_OF_DAY); // 获取当前小时数(24 小时制)
        System.out.print(hour + "时");
        int minute = calendar.get(Calendar.MINUTE); // 获取当前分钟
        System.out.print(minute + "分");
        int second = calendar.get(Calendar.SECOND); // 获取当前秒数
        System.out.print(second + "秒");
        int millisecond = calendar.get(Calendar.MILLISECOND); // 获取毫秒数
        System.out.print(millisecond + "毫秒");
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // 获取今天是本月第几天
        System.out.println("今天是本月的第 " + dayOfMonth + " 天");
        int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);
// 获取今天是本月第几周
        System.out.println("今天是本月第 " + dayOfWeekInMonth + " 周");
        int many = calendar.get(Calendar.DAY_OF_YEAR); // 获取今天是今年第几天
        System.out.println("今天是今年第 " + many + " 天");
        Calendar c = Calendar.getInstance();
        c.set(2012, 8, 8); // 设置年月日,时分秒将默认采用当前值
        System.out.println("设置日期为 2012-8-8 后的时间:" + c.getTime()); 
        // 输出时间上面的示例代码演示了 Calendar 类中的方法与常量的结合使用,从而完成处理日期的操作。
    }
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰冰很社恐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值