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. Mybatis---07Mybatis配置文件浅析(五)

    1.environments:MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做.例如,开发.测试和生产环境需要有不同的配置: ...

  2. 枚举的使用(限foton)

    使用: /** * 服务真实性标签 * * @param realRepairs * 真实维修单数 * @param totalRepairs * 总单数 * @return */ public st ...

  3. websocket报400错误

    解决方案看了下讨论区说的方案,问题出现在nginx的配置文件,需要修改nginx.conf文件.在linux终端中敲入vim /etc/nginx/nginx.conf,找到location这个位置, ...

  4. 技术总监的故事告诉大家,要学会say【NO!】

    今天就给大家分享一个发生在我自己身上的事情吧. 1 2015年的时候,我和我的领导A,还有几个小伙伴正在做一个"紧急定制",这个任务是公司老大CEO和重要客户定下来的一个项目,背后 ...

  5. Docker(6)- docker info 命令详解

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 作用 显示 Docker 系统信 ...

  6. c#分割

    Hashtable h = new Hashtable(); ArrayList l = new ArrayList(); string[] lines = System.IO.File.ReadAl ...

  7. 剑指41和为s的连续整数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  8. Core WebApi项目快速入门(二):Filter详解

    Core的核心是DI,面向AOP的编程方式.在.NetCore中AOP的实现很大程度上依赖于Filter.下面就Core WebApi中的Filter进行举例. 其中鉴权中心我个人认为是比较重要的概念 ...

  9. project--客户信息管理系统

    软件设计分析 该软件有三个模块组成:Customer  CustomerList  CustomerView Customer 为实体对象,用来封装客户信息: CustomerList 为 Custo ...

  10. Java 内功修炼 之 数据结构与算法(二)

    一.二叉树补充.多叉树 1.二叉树(非递归实现遍历) (1)前提 前面一篇介绍了 二叉树.顺序二叉树.线索二叉树.哈夫曼树等树结构. 可参考:https://www.cnblogs.com/l-y-h ...