Date类和Calendar类都是关于日期的类,都在java.util包中,使用时需要import。

Date

java.util.Date类的对象用来表示时间和日期,用得最多的是获取系统当前日期和时间,精确到毫秒。

Java中有两个Date类,还有一个是java.sql.Date,这个类一般不用,即使在数据库中也不推荐使用。

写代码时注意导入的包一定是java.util包。

import java.util.Date;
public class TestDate {
public static void main(String[] args) {
Date date = new Date(); // 获得当前的系统日期和时间
System.out.println("今天的日期是:" + date);
Date dateL = new Date(0L);// 带参版:参数是毫秒值
System.out.println("Date(long date)的日期是:" + dateL);
long time = date.getTime(); // 获得毫秒数
System.out.println("自1970年1月1日起以毫秒为单位的时间(GMT):" + time);
// Deprecated,不赞成使用。建议使用Calendar代替。
Date dateYMD = new Date(1999, 01, 02);
Date dateYMDHMS = new Date(1999, 01, 02, 10, 10, 10);
}
}

日期格式化

simpleDateFormat.format(_date):把Date类型转为格式化的字符串

simpleDateFormat.parse("1949-10-01"):把格式化的字符串转为Date类型

import java.text.DateFormat;// 抽象类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
// DateFormat:日期文本
public class TestDate格式化 {
public static void main(String[] args) {
Date _date = new Date(); // 获得当前的系统日期和时间
// 创建DateFormat对象
DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// format(Date date):按照指定模式,把日期转为字符串
String _s = _dateFormat.format(_date);
System.out.println("SimpleDateFormat:" + _s);
// -------------------------------
// parse方法:按照指定格式解析
try {
Date parse = _dateFormat.parse("1949-10-01");
System.out.println(parse);
} catch (ParseException e) {
e.printStackTrace();
}
}
}

Date类里很多方法被宣布“过时了”,过时了不是不能用,只是不赞成使用。

比如上面第一段代码中的Date的带年月日的构造方法。

    @Deprecated
public Date(int year, int month, int date) {
this(year, month, date, 0, 0, 0);
}

如果要通过年月日构造一个日期类型的对象,推荐使用Calendar类。


Calendar

java.util.Calendar类(日历)是抽象类,无法实例化。

public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {
……
}

要得到对象,只能通过调用getInstance方法来获得\

Calendar cal = Calendar.getInstance();

一般得到的是GregorianCalendar的实例对象,可以通过toString()输出结果看到。

方法 解释
Calendar getInstance() 获取Calendar对象
Date getTime() Calendar对象转为Date对象
int get(int fields) 获取fields指定部分的值
void set(int fields, int value) 将value中指定的值设置到fields指定的部分
void add(int fields, int amount) 将amount值添加到fields指定的时间或日期部分
Object clone() 返回调用对象的副本
void clear() 清除当前对象中所有的时间组成部分
boolean after(Object obj) 如果调用对象时间在obj之后,返回true
boolean before(Object obj) 如果调用对象时间在obj之前,返回true
boolean equals(Object obj) 判断调用对象与obj是否相等
import java.util.Calendar;
public class TestCalendar {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// int _year = 2019, _month = 1, _day = 1;
// cal.set(_year, _month - 1, _day);
System.out.println(cal.get(Calendar.YEAR) + ":年");
System.out.println(cal.get(Calendar.MONTH) + ":月,从0开始算");
System.out.println(cal.get(Calendar.DATE) + ":当天 1-31");
System.out.println(cal.get(Calendar.DAY_OF_MONTH) + ":当天 1-31");
System.out.println(cal.get(Calendar.DAY_OF_WEEK) + ":星期,周日算第1天");
System.out.println(cal.get(Calendar.WEEK_OF_MONTH) + ":月的第n周");
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + ":年的第n周");
System.out.println(cal.get(Calendar.DAY_OF_YEAR) + ":一年里的第n天");
System.out.println(cal.get(Calendar.HOUR) + ":12小时制");
System.out.println(cal.get(Calendar.HOUR_OF_DAY) + ":24小时制");
System.out.println(cal.get(Calendar.MINUTE) + ":分");
System.out.println(cal.get(Calendar.SECOND) + ":秒");
System.out.println(cal.get(Calendar.MILLISECOND) + ":毫秒");
// 闰年2月29的一年之后
cal.set(2000, 2 - 1, 29);
// 把日历转为日期
System.out.println(cal.getTime());
cal.add(Calendar.YEAR, 1);
System.out.println(cal.getTime());
}
}

*java8新增的time包

java.time,用于日期、时间处理

|--Clock类:获取指定时区的日期时间

|--Duration类:一段持续的时间

|--Instant类:具体时刻,精确到纳秒

|--LocalDate类:不带时区的时间

……

import java.time.*;
public class TestDateJava8 {
public static void main(String[] args) {
testClock();
testDuration();
testInstant();
testLocalDate();
}
static void testClock() {
System.out.println("---Clock类:获取指定时区的日期时间---");
Clock clock = Clock.systemUTC();// 世界统一时间
System.out.println("当前时刻为:" + clock.instant());
// millis()获取clock对应的毫秒数,与System.currentTimeMillis()输出相同
System.out.println(clock.millis() + ":clock.millis()");
System.out.println(System.currentTimeMillis() + ":System.currentTimeMillis()");
}
static void testDuration() {
System.out.println("---Duration类:一段持续的时间---");
int s = 60 * 59;// 60秒*59=59分钟
Duration d = Duration.ofSeconds(s);
System.out.println(s + "秒相当于" + d.toMinutes() + "分");
System.out.println(s + "秒相当于" + d.toHours() + "小时");
System.out.println(s + "秒相当于" + d.toDays() + "天");
}
static void testInstant() {
System.out.println("---Instant类:具体时刻,精确到纳秒---");
Instant instant = Instant.now();// 获取当前时间
System.out.println(instant + ":Instant.now() ");
Instant instant2 = instant.plusSeconds(6000);
System.out.println(instant2 + ":加时间plusSeconds()");
}
static void testLocalDate() {
System.out.println("---LocalDate类:不带时区的时间---");
LocalDate localDate = LocalDate.now();
System.out.println(localDate + ":LocalDate.now()");
// 获得某年的第几天
int _某一年 = 2017, _第几天 = 100;
localDate = LocalDate.ofYearDay(_某一年, _第几天);
System.out.println(localDate + ":" + _某一年 + "年,第" + _第几天 + "天LocalDate.ofYearDay()");
}
}

Java基础教程——Date类和Calendar类的更多相关文章

  1. Java基础知识强化94:Calendar类之Calendar概述和获取日历字段的方法

    1. Calendar类概述:       Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字段之间的转换提供了一些方法,并 ...

  2. Java基础知识强化95:Calendar类之Calendar类的add()和set()方法

    1. Calendar的add()和set()方法: public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作 public ...

  3. Java基础知识强化96:Calendar类之获取任意年份的2月有多少天的案例

    1. 分析: (1)键盘录入任意的年份 (2)设置日历对象的年月日            年:就是(1)输入的数据            月:是2(3月份)            日:是1  (3)把 ...

  4. Java基础教程(12)--深入理解类

    一.方法的返回值   当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...

  5. 处理时间的类 —— System类、Date类 、SimpleDateFormat类 与 Calendar类

    在我们以往的编程中,就有过通过运行前和运行后时间差来判断时间复杂度的例子,再扯得远一点,我们在C语言中制造随机数的操作,也要用到有关时间的函数.而且,在我们未来的编程中,也会时不时要用到能够读取当前时 ...

  6. JAVA基础(二)—— 常用的类与方法

    JAVA基础(二)-- 常用的类与方法 1 Math类 abs ceil floor 绝对值 大于等于该浮点数的最小整数 小于等于该浮点数的最大整数 max min round 两参数中较大的 两参数 ...

  7. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  8. Java基础-进程与线程之Thread类详解

    Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...

  9. Java基础-IO流对象之字符类(FileWrite与FileReader)

    Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...

随机推荐

  1. 从APT攻击中学习

    0x01. 什么是APT? 可以看出APT攻击,叫高级可持续威胁攻击,也称为定向威胁攻击:什么是定向,也就是指定目标行业而发起进攻 这边又提到供应链和社会工程学,那是什么? 社会工程学,也就是社工,通 ...

  2. java数据结构-08队列

    一.什么是队列 队列是一种特殊的线性表,只能在头尾两端进行操作,特点是先进先出:就像排队买票一样,先来的先买 二.接口设计  三.代码实现 可以使用动态数组.链表等实现:这里两种实现栈与双向链表 1. ...

  3. 【算法】二叉树、N叉树先序、中序、后序、BFS、DFS遍历的递归和迭代实现记录(Java版)

    本文总结了刷LeetCode过程中,有关树的遍历的相关代码实现,包括了二叉树.N叉树先序.中序.后序.BFS.DFS遍历的递归和迭代实现.这也是解决树的遍历问题的固定套路. 一.二叉树的先序.中序.后 ...

  4. Java学习的第十一天

    1. 方法递归 2.this()不理解和类型传递不太理解 3.明天学习完第四章

  5. [Luogu P2014]选课 (树形DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P2014 Solution 这是一道十分经典的树形DP题,这种类型的树形DP有一种很普遍的解法. 首先,观察 ...

  6. ERP的财务凭证的操作与设计--开源软件诞生23

    赤龙ERP财务凭证讲解--第23篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...

  7. Python 1-5】Python教程之——字符串

    字符串或串(String)是由数字.字母.下划线组成的一串字符. 字符串 字符串就是一系列字符.在Python中,用引号括起的都是字符串,其中的引号可以是单引号, 也可以是双引号,如下所示: &quo ...

  8. 微信小程序跳转到微信公众号

    我这里是uniapp里的操作 微信开发者工具配置 微信小程序官网地址:official-account 公众号关注组件. 当用户扫小程序码打开小程序时,开发者可在小程序内配置公众号关注组件,方便用户快 ...

  9. leetcode147median-of-two-sorted-arrays

    题目描述 有两个大小分别为m和n的有序数组A和B.请找出这两个数组的中位数.你需要给出时间复杂度在O(log (m+n))以内的算法. There are two sorted arrays A an ...

  10. 5.1 ICommand

    1. CanExecute实现 只是将命令绑定到特定控件是不会触发CanExecute方法执行,该方法只是在实例化命令的时候才使用,其余如果需要触发该事件,只能通过后台代码组合触发,如更新一个后台类字 ...