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. 封装APP之详解

    一.什么是封装APP 封装APP又称Web APP,Web APP即是一种框架型APP开发模式(HTML5 APP 框架开发模式),该开发方式拥有跨平台的优势,该模式通常由"HTML5云网站 ...

  2. 如何学习C语言

    总结学习 C 语言的几个步骤,其他编程语言基本类似. 看书 学习一门编程语言少不了先学习基本语法. C语言的语法也就是变量,数组.指针.表达式.逻辑操作.函数,宏定义等等.学习这些先买一本入门级书籍, ...

  3. 常用命令--windows

    查看端口号是否占用并杀进程 1 netstat -ano | findstr " " 2 tasklist | findstr " " 3 taskkill / ...

  4. Flask常用API

    Flask常用API 1.os ​ 拼接路径:pathname = os.path.join(basepath, filename) 获得文件名后缀:suffix = os.path.splitext ...

  5. php ci下添加一个创建常用的模块和控制器方法

    我这么写是非常不好的 ,这些都可以写在lirbraries里面 (ci就是这么干的) 我这里是自己用 大概一个模型 没那么多讲究 现在core/CodeIgniter.php 文件 if($modle ...

  6. leetcode72:combinations

    题目描述 给出两个整数n和k,返回从1到n中取k个数字的所有可能的组合 例如: 如果n=4,k=2,结果为 [↵ [2,4],↵ [3,4],↵ [2,3],↵ [1,2],↵ [1,3],↵ [1, ...

  7. 《精通Spring4.x企业应用开发实战》第二章

    昨天联系了一下学长,学长说这个项目因为种种原因代码比较混乱,感觉最坏的打算是从头开始写. 大概询问了一下学长和xianhua学姐的建议,又看了看网上的资料,这个项目开发的技术栈基本就是SpringBo ...

  8. 【笔记】拉勾Java工程师高薪训练营-第一阶段 开源框架源码解析-模块一 持久层框架涉及实现及MyBatis源码分析-任务一:自定义持久层框架

    以下笔记是我看完视频之后总结整理的,部分较为基础的知识点也做了补充,如有问题欢迎沟通. 目录 任务一:自定义持久层框架 1.1 JDBC回顾及问题分析 1.2 自定义持久层框架思路分析 1.3 IPe ...

  9. 【译】关于Rust模块的清晰解释

    原文链接: http://www.sheshbabu.com/posts/rust-module-system/ 原文标题: Clear explanation of Rust's module sy ...

  10. S5830 android 2.3.4和2.3.7

    12年元旦买的手机S5830,原机自带2.3.4的系统. 看到人家的机子2.3.6的效果稍微绚一点,动了想刷机的念头. 前两天刷了2.3.7,效果还满意,用的还舒服,感觉就是有些费电, 本来就对智能手 ...