JAVA日期处理类详解

目录
  • Date类
    • 构造方法
    • 常用方法
      • 常用方法
  • Calendar类
  • DataFormat类
    • 常用构造方法
    • pattern字符串格式规则
    • 常用方法
  • 练习
  • 总结

Date类

java.util.Date类表示特定的瞬间,精确到毫秒需要导包。注意,此时Date类中多个包中都存在,不要导错导。

构造方法

Date()
分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
Date(long date)
分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)经过date ms后的指定毫秒数。

简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。

public class DateDemo {
    public static void main(String[] args) {
        //创建日期对象,把当前的时间转成日期对象
        System.out.println(new Date());
        //创建日期对象,把当前的毫秒值转成日期对象
        System.out.println(new Date(0L));
        //1970年1月1日经过100000000L以后的时间
        System.out.println(new Date(100000000L));
    }
}
//结果
18 15:56:43 CST 2021
Thu Jan 01 08:00:00 CST 1970
Fri Jan 02 11:46:40 CST 1970
Process finished with exit code 0

常用方法

Date类中的多数方法已经过时(被Calender类代替),常用的方法有:

long getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
void setTime(long time)
设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。
String toString()
把此Date对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
public static void main (String[]args) throws Exception {
    Date date =new Date();
    long time =date.getTime();
    System.out.println(time);//1594016487419
}

Calendar类

java.util.Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。

创建Calendar对象

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类GregorianCalendar对象,如下:

static Calendar getInstance()
使用默认时区和语言环境获得一个日历

所以:

//获取当前的日历对象
Calendar instance = Calendar.getInstance();

Calendar类中提供很多成员常量(静态的,由类名Calendar去调,都是int类型),代表给定的日历字段:

字段值 含义
YEAR
MONTH 月(从0开始,可以+1使用)
DAY_OF_MONTH 月中的天(几号)
HOUR 时(12小时制)
HOUR_OF_DAY 时(24小时制)
MINUTE
SECOND
DAY_OF_WEAK 周中的天(周几,周日为1,可以+1使用)

注意:1、西方星期的开始为周日,中国为周一。2、在Calendar类中,月份的表示是以0-11代表1-12月。

常用方法

int get(int field)
返回给定日历字段的值。
 //演示:
    public class DateDemo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
        System.out.println(year+"年"+month+"月"+day+"日\t"+hour+":"+minute+":"+second);
    }
}
  //结果:
java.util.GregorianCalendar[time=1629281702695,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=2021,MONTH=7,WEEK_OF_YEAR=34,WEEK_OF_MONTH=3,DAY_OF_MONTH=18,DAY_OF_YEAR=230,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=6,HOUR_OF_DAY=18,MINUTE=15,SECOND=2,MILLISECOND=695,ZONE_OFFSET=28800000,DST_OFFSET=0]
2021年7月18日	18:15:2
Process finished with exit code 0
void set(int field, int value)
         将给定的日历字段设置为给定值。
//field:域,成员变量
public class DateDemo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        //设置年为4300年
       calendar.set(Calendar.YEAR, 4300);
       //设置月为2月
        calendar.set(Calendar.MONTH, 2);
        //设置日为2日
        calendar.set(Calendar.DAY_OF_MONTH, 2);
        //设置小时为2时
        calendar.set(Calendar.HOUR_OF_DAY, 2);
        //设置分钟为2分
        calendar.set(Calendar.MINUTE, 2);
        //设置秒为2秒
        calendar.set(Calendar.SECOND, 2);
        System.out.println(calendar);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
        System.out.println(year+"年"+month+"月"+day+"日\t"+hour+":"+minute+":"+second);
    }
}
//结果
java.util.GregorianCalendar[time=?,areFieldsSet=false,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=4300,MONTH=2,WEEK_OF_YEAR=34,WEEK_OF_MONTH=3,DAY_OF_MONTH=2,DAY_OF_YEAR=230,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=6,HOUR_OF_DAY=2,MINUTE=2,SECOND=2,MILLISECOND=751,ZONE_OFFSET=28800000,DST_OFFSET=0]
4300年2月2日	2:2:2
Process finished with exit code 0
abstract void add(int field, int amount)
根据日历的规则,为给定的日历字段添加或减去指定的时间量。
public class DateDemo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        //将月份减去5个月(现在是八月)   ~!月是从零开始的
        calendar.add(Calendar.MONTH,-5);
        //将年减少2年(现在是2021年)
        calendar.add(Calendar.YEAR,-2);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
        System.out.println("年:"+year);
        System.out.println("月:"+month);
    }
}

年:2019
月:2
//月是从零开始的
Process finished with exit code 0
Date getTime()
返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
public class DateDemo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();
        System.out.println(date);
    }
}
Wed Aug 18 23:21:51 CST 2021
Process finished with exit code 0

DataFormat类

java.text.DateFormat是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

格式化:按照指定的格式,从Date对象转换为String对象。

解析:按照指定的格式,从String对象转换为Date对象.

由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。

常用构造方法

SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造
    //pattern代表日期时间的自定义格式 比如:"yyyy-MM-dd HH:mm:ss";  "yyyy/MM/dd HH:mm:ss";  "yyyy年MM月dd日 HH:mm:ss"
SimpleDateFormat()
用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。

pattern字符串格式规则

字母 日期或时间元素 表示 示例
y Year 1996; 95
M 年中的月份 Month July; 07
D 年中的天数 Number 189
d 月份中的天数 Number 10
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
a Am/Pm标记 Text Pm
h am/pm中的小时数(1-12) Number 12
k 一天中的小时数(1-24) Number 24
E 星期中的天数 Text Tuesday;Tue

常用方法

public String format(Date date)
    将Date对象格式化为字符串。
public class FormatDemo {
    public static void main(String[] args) {
        Date now=new Date();
        // 指定 格式器化 的时间模式(是一个字符串,用特定字符表示不同的时间信息)
        // SimpleDateFormat sdf = new SimpleDateFormat();
        //将日期转为字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        //将日期转为字符串
        String format = sdf.format(now);
        System.out.println(format);
    }
}
//结果演示
//21-8-19 上午12:15
2021年08月19日 00:14:12
Process finished with exit code 0
public Date parse(String source)
    将字符串解析为Date对象。
//!!!source这个字符串和SimpleFormat(String Pattern)里的Pattern这个字符串是同一个!!!!!!否则会报错!
public class FormatDemo {
    public static void main(String[] args) throws ParseException {
        Date now=new Date();
        // 指定 格式器化 的时间模式(是一个字符串,用特定字符表示不同的时间信息)
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //将符合时间模式的日期字符串转为日期对象
        String timeStr="2021-05-21 13:14:00";
        Date parse = sdf.parse(timeStr);
        System.out.println(parse);
    }
}
//演示
Fri May 21 13:14:00 CST 2021
Process finished with exit code 0

练习

计算出一个人已经出生了多少天

public static void main(String[]args) throws Exception {
    System.out.println("请输入出生日期格式YYYY-MM-dd");
    Scanner scanner =new Scanner(System.in);
    //获取出生日期,键盘输入
    String birthdayString= scanner.next();
    //将字符串日期,转成Date对象
    //创建SimpleDateFormat对象,写日期模式
    SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
    //调用方法parse,字符串转成日期对象
    Date birthdayDate=sdf.parse(birthday String);
    //获取今天的日期对象
    Date todayDate =new Date();
    //将两个日期转成毫秒值,Date类的方法getTime
    long birthdaySecond =birthdayDate.getTime();
    long todaySecond =todayDate.getTime();
    long secone=todaySecond - birthdaySecond;
    if(secone<0) {
        System.out.println("还没出生呢");
    }else{
        System.out.println(大概已经出生:""+secone/1000/60/60/24+"天");
    }
    scanner.close();
}

总结

本篇文章就到这里了希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java实现的日期处理类完整实例

    本文实例讲述了Java实现的日期处理类.分享给大家供大家参考,具体如下: 开发中常常要使用日期,先小结如下,以备后用. import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class FormatTime { private final static SimpleDateFormat sdf=new

  • java日期处理工具类

    本文针对日期处理进行学习使用,主要分为两部分,下面为大家具体介绍一下 第一部分:日期处理基础知识 Date 类 作用:最主要的作用就是获得当前时间 将日期转换为标准格式 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = sdf.format(date); System.out.println("2015-10-16 1

  • JAVA时间日期处理类实例

    本文实例讲述了JAVA时间日期处理类,主要用来遍历两个日期之间的每一天.分享给大家供大家参考.具体如下: /** * * 文 件 名: AccountDate.java * * 创建时间: 2008-11-18 * * Email : **@163.com */ import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.A

  • 18个Java8日期处理的实践(太有用了)

    Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API. Java处理日期.日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限. 新API基于ISO标准日历系统,java.time包下的所有类都是不可变类型而且线程安全. 示例1:Java 8中获取今天的日期 Java 8 中的 LocalDate 用于表示当天日期.和java.util.Date不同,它只有日

  • Java日期处理工具类DateUtils详解

    本文实例为大家分享了Java日期处理工具类DateUtils的具体代码,供大家参考,具体内容如下 import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * <日期时间处理工具类> */ public class DateUtils { /** * Dat

  • JAVA日期处理类详解

    目录 Date类 构造方法 常用方法 常用方法 Calendar类 DataFormat类 常用构造方法 pattern字符串格式规则 常用方法 练习 总结 Date类 java.util.Date类表示特定的瞬间,精确到毫秒需要导包.注意,此时Date类中多个包中都存在,不要导错导. 构造方法 Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒). Date(long date) 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为"历元(epoch)

  • Java之ThreadPoolExecutor类详解

    ThreadPoolExecutor ThreadPoolExecutor是线程池框架的一个核心类,线程池通过线程复用机制,并对线程进行统一管理 降低系统资源消耗.通过复用已存在的线程,降低线程创建和销毁造成的消耗: 提高响应速度.当有任务到达时,无需等待新线程的创建便能立即执行: 提高线程的可管理性.线程是稀缺资源,如果无限制的创建,不仅会消耗大量系统资源,还会降低系统的稳 定性,使用线程池可以进行对线程进行统一的分配.调优和监控. 线程池的运行状态总共有5种,其值和含义分别如下: RUNNI

  • Java中Thread类详解及常用的方法

    目录 一.Thread 的常见构造方法 二.Thread 的常见属性 三.创建线程 四.中断线程 五.线程等待 六.获取线程引用 七.线程休眠 八.线程状态 总结 一.Thread 的常见构造方法 方法 说明 Thread() 创建线程对象 Thread(Runnable target) 使用 Runnable 对象创建线程对象 Thread(String name) 创建线程对象并命名 Thread(Runnable target,String name) 使用 Runnable 对象创建线程

  • Java的Character类详解

    目录 转义序列 Character 方法 isLetter() 方法实例: isDigit() 方法实例: isWhitespace() 方法实例: isUpperCase() 方法实例: isLowerCase() 方法实例: toLowerCase() 方法实例: toString() 方法实例: 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情况.为了解决这个问题,Java语言为内置数据类型char提供了包装类Character类.Character 类用于对单个字符进

  • Java 中ThreadLocal类详解

    ThreadLocal类,代表一个线程局部变量,通过把数据放在ThreadLocal中,可以让每个线程创建一个该变量的副本.也可以看成是线程同步的另一种方式吧,通过为每个线程创建一个变量的线程本地副本,从而避免并发线程同时读写同一个变量资源时的冲突. 示例如下: import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import ja

  • Java FileUploadUtil工具类详解

    本文实例为大家分享了FileUploadUtil工具类的具体代码,供大家参考,具体内容如下 package com.gootrip.util; import java.io.File; import java.util.*; import org.apache.commons.fileupload.*; import javax.servlet.http.HttpServletRequest; import java.util.regex.Pattern; import java.io.IOEx

  • java ThreadLocal使用案例详解

    本文借由并发环境下使用线程不安全的SimpleDateFormat优化案例,帮助大家理解ThreadLocal. 最近整理公司项目,发现不少写的比较糟糕的地方,比如下面这个: public class DateUtil { private final static SimpleDateFormat sdfyhm = new SimpleDateFormat( "yyyyMMdd"); public synchronized static Date parseymdhms(String

  • java日期相关类实例详解

    一.Date类 类 Date 表示特定的瞬间,精确到毫秒.用距离1970年1月1日00:00:00的毫秒数(long)类型来表示一个特定的时间点,该值可正可负. Date类中很多方法已经过时,使用Calendar来替代. 常用方法有 long getTime() void setTime(long time) public class T01Date { public static void main(String[] args) { //getTime():返回的时间是距离1970年的毫秒数.

  • Java日期时间类及计算详解

    目录 1. Java中与日期相关的类 1.1 java.util包 ① Date类 ② Calendar 日历类 roll 设置Calendar的容错性 set 1.2 java.time包 ① LocalDate 本地日期类 ② LocalTime 本地时间类 ③ LocalDateTime 本地日期时间类 ④ Instant 类 ⑤ Period 类 ⑥ Duration 类 2. 时间间隔计算 2.1 Period与Duration类 2.1.1 Duration 2.1.2 Period

  • Java项目常见工具类详解

    目录 JWT工具类 MD5工具类 视频点播工具类 公共常量工具类 日期操作工具类 Http客户端工具类 获取IP工具类 JWT工具类 这里一共涉及四个方法: 传入用户信息获得token 传入token字符串判断token是否存在与有效 传入HttpServletRequest,通过获取Header中的token判断是否存在与有效 根据token获取用户id public class JwtUtils { //token过期时间 public static final long EXPIRE =

随机推荐