Java_日期时间相关类
在java中获取日期时间相关的Date类和抽象类Calendar 以及格式化时间的类SimpDateFormat。Date类中的大部分方法都已经过时了。在java1.8后又新增了处理时间相关的类(java.time包)且该包下所有的类都是不可变类型且线程安全。
- Instant 瞬时实例
- LocalDate 本地日期,不包含具体时间
- LocalTime 本地时间,不包含日期
- LocalDateTime 日期和时间,不包含时差和时区信息
- ZonedDateTime 完整的日期和时间,包含时区和时差信息
一、Date类(java.util.date)
使用date类获取时可以使用toString()方法,将 Date 对象转换为 String: dow mon dd hh:mm:ss zzz yyyy形式 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
 // 时间以1970 年 1 月 1 日 00:00:00 GMT 为基准来计算
 Date date = new Date(); //内部调用的是System的currentTimeMillis()方法
 Date d = new Date(1432356666666L); //某一时间的毫秒数
 System.out.println(date.toString()); // Mon Jul 23 21:56:29 CST 2018
 System.out.println(d.toString());   // Sat May 23 12:51:06 CST 2015
 System.out.println(System.currentTimeMillis()); // 当前系统时间的毫秒数
 System.out.println(date.getTime()); // 当前系统时间的毫秒数
 // 日期时间的比较
 System.out.println(date.after(d)); //true  date在指定时间之后则返回 true
 System.out.println(date.before(d));//false date在指定时间之前则返回 true
 System.out.println(date.equals(d));//false 比较两个日期的相等性
 System.out.println(date.compareTo(d)); // 1
 // 比较当调用此方法的Date对象和指定日期。
 // 两者相等时候返回0。
 // 调用对象在指定日期之前则返回负数。
 // 调用对象在指定日期之后则返回正数。
 System.out.println(date.toInstant()); // 2018-07-23T14:28:17.211Z
二、Calendar类(java.util.Calendar)
Calendar类是一个抽象类,可以方便的设置和获取日期数据的特定部分。它还有个已知的子类GregorianCalendar。
Calendar中的静态常量(常用的):
| 常量 | 描述 | 
|---|---|
| Calendar.AM | 从午夜到中午之前这段时间的 AM_PM 字段值 | 
| Calendar.PM | 从中午到午夜之前这段时间的 AM_PM 字段值 | 
| Calendar.YEAR | 年份 | 
| Calendar.MONTH | 月份 | 
| Calendar.DATE | 日期 | 
| Calendar.HOUR | 小时(12小时制) | 
| Calendar.MINUTE | 分钟 | 
| Calendar.SECOND | 秒 | 
| Calendar.WEEK_OF_YEAR | 年内的某星期 | 
| Calendar.WEEK_OF_MONTH | 月内的某星期 | 
| Calendar.DAY_OF_YEAR | 年内的某天 | 
| Calendar.DAY_OF_MONTH | 月内的某天 | 
| Calendar.DAY_OF_WEEK | 星期内的某天(从周日开始计算) | 
| Calendar.HOUR_OF_DAY | 小时(24小时制) | 
获取当前相关日期时间相关的例子:
 Calendar c = Calendar.getInstance(); // 获取当前时间的日历对象
 Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00")); //获取东八区的日历实例对象
 System.out.println(c.get(Calendar.YEAR));   // 2018 年份
 System.out.println(c.get(Calendar.MONTH)+1);// 7  月份,需要+1
 System.out.println(c.get(Calendar.DATE));   // 23 日期
 System.out.println(c.get(Calendar.AM_PM));  // 1  AM=0, PM=1
 System.out.println(c.get(Calendar.HOUR));   // 10 小时
 System.out.println(c.get(Calendar.MINUTE)); // 32 分钟
 System.out.println(c.get(Calendar.SECOND)); // 50 秒
 System.out.println(c.get(Calendar.MILLISECOND)); // 570  毫秒
//--------------------------------------------------------------------------
 System.out.println(c.toString()); // 返回此日历的字符串表示形式
 System.out.println(c.getTime()); // 返回一个Date类型的时间 Tue Jul 24 22:00:44 CST 2018
 System.out.println(c.getTimeInMillis()); // 返回当前时间的毫秒数
 System.out.println(c.getTimeZone().getDisplayName()); // 中国标准时间  默认区域的用户的时区名称
 System.out.println(c.getTimeZone().getID()); // Asia/Shanghai 返回时区ID
 System.out.println(c.getMaximum(Calendar.HOUR)); // 11 返回小时中最大的数
实例:
判断是否为闰年
- 方法一
 // 是Calendar具体的子类,提供了一个判断闰年的方法
 GregorianCalendar gc = new GregorianCalendar();
 System.out.println(gc.isLeapYear(2018)? " 是闰年":" 是平年");
- 方法二
 //满足条件之一: 1、能被4整除但不能被100整除2、能被400整 除
 Scaner s =new Scanner(System.in);
 System.out.println("请输入年份:");
 long n = s.nextLong();
 if((n%4 ==0 && n%100 !=0) || n%400 ==0 ){
     System.out.println("是闰年");
 }else {
     System.out.println("是平年");
 }
三、SimpleDateFormat类(java.text.SimpleDateFormat)
SimpleDateFormat继承抽象类 DateFormat。 是一个以与语言环境有关的方式来格式化和解析日期的具体类,且非线程安全。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。使得可以选择任何用户定义的日期-时间格式的模式。
日期和时间的格式化编码:
| 字母 | 描述 | 表示 | 示例 | 
|---|---|---|---|
| y | 年份 | Year | 2018;18 | 
| M | 月份 | Month | July; Jul; 07 | 
| d | 月内的日期 | Number | 10 | 
| h | 12小时制(1~12) | Number | 12 | 
| H | 24小时制 (0~23) | Number | 22 | 
| m | 分钟数 | Number | 30 | 
| s | 秒数 | Number | 55 | 
| S | 毫秒数 | Number | 234 | 
| E | 星期几 | Text | Tuesday | 
| D | 年内的天数 | Number | 180 | 
| F | 月内的星期 | Number | 2 (second Wed. in July) | 
| w | 年内的周数 | Number | 40 | 
| W | 月内的周数 | Number | 1 | 
| a | AM/PM 标记 | Text | PM | 
| k | 24小时制(1~24) | Number | 24 | 
| K | 12小时制(0~11) | Number | 10 | 
| z | 时区 | General time zone | Eastern Standard Time | 
上述的模式字母通常是重复的,其数量确定其精确表示:
- Text:格式化来说,字母数量大于等于4,则使用完全形式;否则,在可用的情况下使用短形式或缩写形式。解析来说,两种形式都是可接受的,与字母的数量无关
- Number:格式化来说,字母的数量是最小的数位,如果数位不够,则用 0 填充以达到此数量。解析来说,字母的数量被忽略,除非必须分开两个相邻字段。
- Year:格式器的 Calendar 是格里高利历,则应用以下规则:
 格式化来说,如果字母的数量为 2,则年份截取为 2 位数,否则将年份解释为 number。
 解析来说,如果字母的数量大于 2,则年份照字面意义进行解释,而不管数位是多少.
- Month: 如果字母的数量为 3 或大于 3,则将月份解释为 text;否则解释为 number。
- General time zone: 如果时区有名称,则将它们解释为 text。
实例:
 // 假设不加Locale.ENGLISH,默认则以本系统语言(中文)显示
 Date d = new Date();
 // 年份,月份,日,星期,小时,分钟,秒全显示(数位不够,则用 0 填充)。
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd a EEEE hh:mm:ss.SSS z ",Locale.ENGLISH);
 System.out.println(sdf.format(d)); // 2018/07/08 PM Sunday 01:02:24.562 CST
 // 年份只取后两位,月份为Text且简写
 SimpleDateFormat sdf1 = new SimpleDateFormat("yy/M/d a E h:m:s.S z ",Locale.ENGLISH);
  System.out.println(sdf1.format(d)); // 18/7/8 PM Sun 1:2:24.562 CST
//--------------------------------------------------------------
 //使用printf()方法
 System.out.printf("%tc%n",d); // 星期六 七月 08 13:02:24 CST 2018
 System.out.printf("%tF%n",d); // 2018-07-08
 System.out.printf("%tD%n",d); // 07/08/18
 System.out.printf("%tT%n",d); // 13:02:24
 System.out.printf("%tr%n",d); // 01:02:24 下午
 System.out.printf("%tR%n",d); // 13:02
四、java.time包下相关的类
在最开始也讲了这几个日期时间相关的类的含义,从字面的意思也可以看出这几个类是逐渐的获取更详细的信息。
 System.out.println(Instant.now()); // 从系统时钟获取当前瞬间
 System.out.println(LocalDate.now()); // 从默认时区的系统时钟获取当前日期
 System.out.println(LocalTime.now()); // 从默认时区的系统时钟获取当前时间
 System.out.println(LocalDateTime.now()); // 从默认时区的系统时钟获取当前日期和时间
 System.out.println(ZonedDateTime.now());//从默认时区的系统时钟获取当前的日期时间时差时区
 /*结果:
 2018-07-08T08:08:46.701Z
 2018-07-08
 16:08:46.988
 2018-07-08T16:08:46.988
 2018-07-08T16:08:46.989+08:00[Asia/Shanghai]
 */
 // 源码是通过((year & 3) == 0) && ((year % 100) != 0 || (year % 400) == 0)来判断
 System.out.println(LocalDate.now().isLeapYear()); // 判断系统的年份是否为闰年
Java_日期时间相关类的更多相关文章
- java编程--04比较几个常用的日期时间相关类的区别
		第一篇,介绍日期的比较 第二篇,介绍日期的格式化 第三篇,介绍关于日期常用的计算 第四篇,比较几个常用的日期时间相关类的区别 第五篇,jdk9对日期类进行了更新,写一些i自己的学习心得. 下面以一组思 ... 
- Java ——日期时间 日期时间相关类 随机数 定义类属性时建议使用引用数据类型
		本节重点思维导图 Date对象创建 两个构造函数: Date() ----使用当前日期和时间来初始化对象 Date(long millisec) -----接收一个参数,该参数是从1970年1月1日起 ... 
- jdbc 日期时间相关的类型
		jdbc 日期时间相关的类型 1.sql.Date sql包中的日期类Date是util包中Date类的子类,实际上也是util.Date类的子集.它只处理年月日,而忽略小时和分秒,用以代表SQL的D ... 
- 日期操作类--Date类
		Date-API ava.util包提供了Date类来封装当前的日期和时间.Date类提供两个构造函数来实例化Date对象.第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函 ... 
- android内部培训视频_第三节(3)_常用控件(ViewPager、日期时间相关、ListView)
		第三节(2):常用控件之ViewPager.日期时间相关.ListView 一.ViewPager 实例:结合PagerAdapter滑动切换图片 二.日期时间相关:AnalogClock\Dig ... 
- Android随笔之——Android时间、日期相关类和方法
		今天要讲的是Android里关于时间.日期相关类和方法.在Android中,跟时间.日期有关的类主要有Time.Calendar.Date三个类.而与日期格式化输出有关的DateFormat和Simp ... 
- Java 日期格式化工具类
		import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ... 
- 日期操作类--SimpleDateFormat类
		使用SimpleDateFormat格式化日期 SimpleDateFormat是一个以语言环境敏感的方式来格式化和分析日期的类.SimpleDateFormat允许你选择任何用户自定义日期时间格式来 ... 
- 日期转换类  DateConverter.java
		package com.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.D ... 
随机推荐
- 使用offsetof对结构体指针偏移操作
			题目来自于COMP20003 Tutorial 2: Program m ing Challenge 2.2 The technology stack at Hidebound Inc. uses a ... 
- wince单实例启动
			static class Program { [DllImport("Toolhelp.dll")] public static extern IntPtr CreateToolh ... 
- Java基础:Java变量、数据类型、运算符(2)
			1. 标识符和关键字 1.1 标识符 标识符是用来标识类名.对象名.变量名.方法名.类型名.数组名.文件名的有效序列. Java规定,标识符由字母.数字.下划线“_”.美元符号“$”组成,并且首字母不 ... 
- python 条件分支与循环
			一.if判断: 语法一: if 条件: # 条件成立时执行的子代码块 代码1 代码2 代码3 示例: sex='female' age=18 is_beautiful=True if sex == ' ... 
- Azure Machine Learning
			About me In my spare time, I love learning new technologies and going to hackathons. Our hackathon p ... 
- js基础-字符串常用属性合集
			/* * * 实例方法---->必须要通过new的方式创建的对象(实例对象)来调用的方法 * 静态方法---->直接通过大写的构造函数的名字调用的方法(直接通过大写的对象名字调 ... 
- python之生成器和列表推导式
			一.生成器函数 1.生成器 就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.构建生成器的两种方式 1,生成 ... 
- python之内置函数(二)与匿名函数、递归函数初识
			一.内置函数(二)1.和数据结构相关(24)列表和元祖(2)list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素).tuple:将一个可迭代对象转化成元组(如果是字典,默认将k ... 
- Linux端口被占用的解决(附Python专版)
			先说一般情况的解决: lsof -i:8000 查出PID,然后 kill掉程序,接着就可以了 软件重启之后绑定没有释放,lsof -i:8080也查不出来占用的情况 再来个长连接版Python解决法 ... 
- dubbo和zikkeper的使用
			1.先来一段异常看看:No provider available for the service 16:05:25.755 [localhost-startStop-1] WARN o.s.w.c.s ... 
