最近在自己瞎折腾,有一个需求是计算当前日期到指定日期有多少天,用于实现纪念日或倒计时的功能。查阅资料后发现Java 8之前的时间日期处理很是麻烦而且被频频吐槽,以至于后来在 Java 8 中推出了一个专门的 time 包。虽然学习编程最忌守旧,但是老版本的处理方式在 Java 8 或以上版本中并没有废除并且还有很多项目仍在使用,所以我们还是很有必要学习老版本的 api。

日历类Calendar

Calendar是一个使用单例设计模式的抽象类,封装了如YEAR、MONTH、DATE、SUNDAY(一个星期的七天)和JANUARY(一年的十二个月)等诸多日历字段,并提供了一些操作字段的方法。

构造方法

Calendar是典型的单例设计模式,构造函数不对外暴露,使用getInstance()方法获得日历对象。

static Calendar getInstance(); 使用默认时区和语言环境获得一个日历,此外还有多个重载用于获得指定语言环境、时区下的日历对象。

主要方法

get

int get(int field); 返回给定日历字段的值

Calendar cal = Calendar.getInstance();

//调用get函数获取日历对象的年、月、日字段

//get函数传入的参数为Calendar封装好的字段

String days = cal.get(Calendar.YEAR)+"年"

+cal.get(Calendar.MONTH)+"月"+cal.get(Calendar.DATE)+"日";

//输出检验

System.out.println("今天是:");

System.out.println(days);

set

void set(int field, int value); 将给定的日历字段设置为给定值

void set还有诸如set(int year, int month, int date)等多个重载用于设定日历字段

cal.set(Calendar.YEAR,2017);//将cal对象表示的时间的年份设置为2017年

cal.set(2017,Calendar.FEBRUARY,24);//将cal对象表示的时间设置为2017年2月24日

//可以将这两句代码分别插入上一段的1、2行之间进行测试

//值得一提的是,Calendar类中将一月JANUARY字段的值定义为0,FEBRUARY的值定义为1

//所以在set函数的参数中使用月份时整数0表示1月,1表示二月并以此类推

//推荐使用Calendar.FEBRUARY等字段以提高代码可读性

add

void add(int field, int amount); 根据日历的规则,为给定的日历字段添加或减去指定的时间量。

Calendar cal = Calendar.getInstance();

//调用get函数获取日历对象的年、月、日字段

//get函数传入的参数为Calendar封装好的字段

String days = cal.get(Calendar.YEAR)+"年"

+cal.get(Calendar.MONTH)+"月"+cal.get(Calendar.DATE)+"日";

//输出检验

System.out.println("今天是:");

System.out.println(days);

cal.add(Calendar.MONTH,1);

String nextMonth = cal.get(Calendar.YEAR)+"年"

+cal.get(Calendar.MONTH)+"月"+cal.get(Calendar.DATE)+"日";

System.out.println("一个月后是:");

System.out.println(nextMonth);

其他方法

long getTimeInMillis(); 返回此 Calendar 的时间值,以毫秒为单位。

日期类Date

Date类是自Java诞生就有的类,也是少数槽点较多的类之一,自Calendar诞生后Date中大多数方法都被取代,但是要使用日期格式化类按要求获取日期和时间,Date类还是必不可少的。

构造方法

Date(); 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)

Date(long time); 分配Date对象并初始化此对象,以表示自从协调世界时以来的指定的毫秒数

主要方法

boolean after(Date when); 测试此日期是否在指定日期之后

boolean before(Date when); 测试此日期是否在指定日期之前

long getTime(); 返回此 Date对象对协调世界时相差的毫秒数

Date parse(String text); 根据指定的字符串生成一个Date对象

Date nowdays = new Date();

System.out.println(nowdays);

//输出结果为Tue Feb 13 11:18:33 CST 2018

//先用Calendar获取一个指定时间的毫秒值

Calendar calendar = Calendar.getInstance();

calendar.set(2017,Calendar.FEBRUARY,24,0,0,0);

//用指定日期的毫秒值初始化Date对象并输出检验

Date day = new Date(calendar.getTimeInMillis());

System.out.println(day);

//输出结果Fri Feb 24 00:00:00 CST 2017

日期格式化类

Java作为当前最火热的编程语言之一,在日期时间处理的功能上必定要考虑到不同时区、不同习惯导致的语言和习惯差别。为了解决这个问题,在java.text包中提供了DateFormat和SimpleDateFormat两个类。

DateFormat

DateFormat用于根据要求格式化或标准化日期和时间对象,其提供了多个类似的方法以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。使用DateFormat时一般先获取到格式化器,然后通过format方法传入Date对象将数据格式化为字符串。

获取格式化器

static DateFormat getDateInstance(); 获取默认情况下格式化日期的实例对象

static DateFormat getTimeInstance(); 获取默认情况下格式化时间的实例对象

static DateFormat getDateTimeInstance(); 获取默认情况下格式化日期和时间的实例对象

以上前两个个方法还分别有单个参数的(指定风格)、两个参数的(指定风格和语言环境)的重载;第三个方法还有两个参数(指定风格)、三个参数(指定风格和语言环境)的重载;所以DateFormat共有九个方法可以获取格式化器

格式化Date对象

String format(Date date); 将一个 Date 格式化为日期/时间字符串

Date date = new Date();

DateFormat df = null;

//默认风格的日期格式化器

df = DateFormat.getDateInstance();

System.out.println(df.format(date));

//SHORT风格的日期格式化器

df = DateFormat.getDateInstance(DateFormat.SHORT);

System.out.println(df.format(date));

//两次输出结果

//2018年2月13日

//2018/2/13

Date date = new Date();

DateFormat df = null;

//默认风格的时间格式化器(中文、中国风格)

df = DateFormat.getTimeInstance();

System.out.println(df.format(date));

//美式英语、美国风格的日期格式化器

df = DateFormat.getTimeInstance(DateFormat.SHORT,new Locale("en_us","as"));

System.out.println(df.format(date));

//两次输出结果

//下午12:12:44

//12:12:44 CST

SimpleDateFormat

顾名思义,SimpleDateFormat是一个很简便的日期格式化类。它是DateFormat的子类,重写了format方法,使用时可以通过获取格式化器对象,此格式化器对象用正则表达式的方式格式化文本。

构造方法

SimpleDateFormat(); 用默认的模式和默认语言环境的日期格式符号构造格式化器

SimpleDateFormat(String pattern); 用给定的模式构造格式化器

其他方法

String format(Date date); 将一个 Date 格式化为日期/时间字符串

Date date = new Date();

SimpleDateFormat sdf = null;

sdf = new SimpleDateFormat("yyyy年MM月dd日hh时mm分");

System.out.println(sdf.format(date));

//输出结果

//2018年02月13日12时53分

sdf = new SimpleDateFormat("yyyy/MM/dd");

System.out.println(sdf.format(date));

//输出结果

//2018/02/13

正则规则

SimpleDateFormat是利用正则表达式来格式化日期的,在文档中将其称之为“模式字母”,在常用的模式字母中,除月份用M分钟用m外其他皆为小写的单词首字母。

java8之前_Java 8 之前的时间处理相关推荐

  1. java8中计算2个日期时间之间相差多少月

    Java8 java8中计算2个日期时间之间相差多少月 方法一 (计算时不计算天) DateTimeFormatter sdf = DateTimeFormatter.ofPattern(" ...

  2. java8日期转时间戳_Java 8日期和时间

    java8日期转时间戳 如今,一些应用程序仍在使用java.util.Date和java.util.Calendar API,包括使我们的生活更轻松地使用这些类型的库,例如JodaTime. 但是,J ...

  3. Java8的产品周期_java8的时间和`Date`的对比

    java8提供了新的时间接口.相对Date,Calendar,个人感觉最大的好处是对时间操作的学习成本很低,比Calendar低. 1. LocalDate,LocalTime,LocalDateTi ...

  4. java date 加一天_Java 8中的时间JAVA成长之路

    Java 8新增了LocalDate和LocalTime接口,为什么要搞一套全新的处理日期和时间的API?因为旧的java.util.Date实在是太难用了. java.util.Date月份从0开始 ...

  5. java 友好时间显示_java 友好的显示时间

    1.显示时间, 30秒以内显示刚刚 几分钟前显示几分钟前 今天时间显示时间,不显示年月日 昨天时间显示昨天+时间,不显示年月日 昨天以前显示具体的年月日 代码如下: public static Str ...

  6. java 判断今天_Java 判断某个具体时间是否属于当天范围(24H)

    Java代码分享:package com.what21; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...

  7. java获取当前系统时间毫秒_java 获取当前系统时间简写 | 学步园

    本文是集合各位网友的经典,在加上我的理解,后续会不断完善. 1.java.util.Date类型转换成long类型 java.util.Date dt = new Date(); System.out ...

  8. java将两个区间范围合并_Java如何将若干时间区间进行合并的方法步骤

    问题原因 工作中突然有个场景,需要合并时间区间.将若干闭合时间区间合并,实现思路如下: 1. 先对日期区间进行按时间顺序排序,这样后一个区间(记为next)的from一定是不小于前一个(记为prev) ...

  9. java的几_Java的几种时间

    1 importjava.util.Calendar;2 importjava.util.Date;3 4 //import java.sql.Date; 5 import java.sql.Time ...

最新文章

  1. (十二)java版b2b2c社交电商spring cloud分布式微服务:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪...
  2. android studio jni路径配置
  3. Sqlserver UrlEncode
  4. mysql5.6 replication_MySQL5.6 Replication主从复制(读写分离) 配置完整版
  5. Ext.menu.Menu菜单栏
  6. 【常用】2DUI跟随3D物体移动(待修复)
  7. 把 mysql 整个加载进内存磁盘中_MySQL 缓冲池 是什么?
  8. Java获取方法信息(某一函数,方法也是一个对象)
  9. 从Kaggle HuBMAP 比赛中学习语义分割
  10. python数据分析是什么意思_选择python进行数据分析的理由和优势
  11. 查看数值类型python_Python数据科学实践 | 数据类型
  12. 数据库系统原理笔记:关系数据库设计
  13. n阶方阵的蛇形排列java_「P·R·N·D」的排列顺序为何成为行业标准,能不能改变呢?...
  14. 项目过程中的部分逻辑
  15. 刚知道,qq聊天的时候可以这么装逼
  16. 计算机的中央处理器CPU包括什么,中央处理器cpu由哪些组成 中央处理器的作用是什么...
  17. Python基础 函数
  18. Android 文字的收起与展开功能
  19. 华为云数据库SQL Server 上云最佳实践
  20. codevs3287货车运输[倍增]

热门文章

  1. vi编辑器基本使用方法
  2. 计算机硬件结构中负责识别,计算机硬件基本结构树状图
  3. java中的关键字:this与super 大详解
  4. python中的import详解_python中的import
  5. 关系数据库设计理论(函数依赖、异常、范式)、ER图
  6. c 对一个mysql数据库进行操作_用C语言操作MySQL数据库
  7. Linux / 设置和查看环境变量的方法
  8. C语言操作符(又称运算符)(1)
  9. 支持自定义的离线语音模块WT516P6Core 串口协议使用说明
  10. #8ms平台,是一个支持ESP32/Sigamastar201、202/RK等硬件的开发平台,现平台Slogan有奖征集# 我们的广告语,将由你们来定!