java时间类Date、Calendar及用法
对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数。在java中时间类主要有Date、Calendar,暂时只介绍 java.util.*下的时间类,对于java.sql.*下的先不做介绍,以后在另外一篇进行补充,这篇主要内容有以下几个。
1、如何获取当前时间参数
2、如何过去某一个月第一天和最后一天
3、如何获取当日日期,当月月份,当年年份
4、如何加减日期
5、获取两个时间之间的时间差
首先,我们需要了解API下对其的介绍,让在使用的时候明白为什么这么写?而不是简单的复制粘贴应付差事。
对于Date,很多方法已经过时迁移到了Calendar类上,但是这是最初的时间类,构造方法主要介绍两种即
Date date= new Date();//分配对象并初始话
Date date= new Date(long date)//分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日00:00:00 GMT)以来的指定毫秒数。
可以看得出来,Date是以历元为标准的,简单的验证下你的猜想。new Date().getYear() 的值是 117 然而今年是 2017 。
对于Calendar,与Date不同的是,他对Date的时间历元进行偏移,要是看括号里的有点晕可不看。API(Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量)。
Calendar不得不说的就是类方法 getInstance,Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:这个方法你必须要知道,不然你玩什么Calendar呢是不是?
Calendar rightNow = Calendar.getInstance();
好了下面我们介绍各种现实需要处理的,也肯定是你进入博客要找的。
在介绍以下的内容前,我们先说明下也不得不说的一个类SimpleDateFormat,其属于java.text.*下,SimpleDateFormat 是一个以语言环境有关的方式来格式化和解析日期的具体类,它允许进行格式化(日期-->文本)、解析(文本-->日期)和规范化。下面很多方法都出现了这个类的应运,简单说一下扫除心中的疑惑,抽空可以看一下API。

1、如何过去当钱时间参数。按yyyy-MM-dd hh:mm:ss 、yyyy-MM-dd、yyyy-MM-dd hh:mm 、yyyyMMdd等等各种情况,这个你们需要什么自己改代码。
public static String getCurrentTime() {
Date NowDate = new Date();
SimpleDateFormat formatter =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
CurrentTime = formatter.format(NowDate);
return CurrentTime;
}

2、如何获取某一个月的第一天和最后一天。
第一天肯定容易,最后一天其实也很容易,主要用到了Calendar和SimpleDateFormat两个类,需要注意的是月份按0---11总共十二个月,不是从1开始的,但是一个月几号第几天却是从1开始的,以下是对两个方法进行的封装。
public static String getLastDayOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));
return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());
}
public static String getFirstDayOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));
return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());
}


3、如何获取当月月份,当年年份,当前日期?较为简单不做测试。在这个方法上你可以测试下当传yyyy-MM-dd等等各种参数,变通应用获取时间参,比如获取2017-09、201709、2017-09-22、20170922等等各种数据,有兴趣的话自己进行测试下验证下自己的想法。
/**
* @param type类型
* dd 日 MM 月 yyyy 年 按需要进行传参
* @return
*/
public static String getCurrentDay(String type) {
java.util.Date NowDate = new java.util.Date();
SimpleDateFormat formatter = new SimpleDateFormat(type);
return formatter.format(NowDate);
}
4、如何加减日期?Calendar类中提供了add方法,按需要进行操作想要的结果哦!
这里简单的介绍下add方法,即add(f, delta)将 delta 添加到 f 字段中,主要有两个规则:
Add 规则 1。调用后
f字段的值减去调用前f字段的值等于delta,以字段f中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。Add 规则 2。如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段
f发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR是一个比DAY_OF_MONTH小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。
废话太多直接弄代码!给个标记,现在的时间是2017-09-21,需要注意的是 向后推一天是 +1 向前是 -1,下面代码的测试结果为2017-09-22
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, +1);
Date d = c.getTime();
System.out.println(new SimpleDateFormat( "yyyy-MM-dd ").format(d));
5、获取两个时间之间的时间差
有时候需要获取两个时间的时间差,下面的方法主要用到了SimpleDateFormat、Math两个类,直接放代码吧!
/**
* 获取时间差
* @param time1 time2 需要计算的时间
* @return
*/
public static String getTimeDeffer(String time1,String time2)
{
String result = "";
if(StringUtils.isNotBlank(time1)&&StringUtils.isNotBlank(time2)){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
long dt1 = sdf.parse( time1 ).getTime();
long dt2 = sdf.parse( time2 ).getTime();
long dc = Math.abs(dt2-dt1);
long seconds = dc/1000;
long date = seconds/(24*60*60); //相差的天数
long hour = (seconds-date*24*60*60)/(60*60);//相差的小时数
long minut = (seconds-date*24*60*60-hour*60*60)/(60);//相差的分钟数
long second = (seconds-date*24*60*60-hour*60*60-minut*60);//相差的秒数
return (date==0?"":(date+"天"))+(hour==0?"":(hour+"小时"))+(minut==0?"":(minut+"分"))+(second==0?"":(second+"秒"));
} catch (ParseException e) {
e.printStackTrace();
}
}
return result;
}
这里我们简单的测试下,就不放图了,简单的说一下,例如:
System.out.println(getTimeDeffer("2015-10-21 10:48:22","2015-10-27 22:48:23"));
结果是:6天12小时1秒
休息下班,明天继续
希望大家能积极发表自己的看法和建议,支持下哦
java时间类Date、Calendar及用法的更多相关文章
- Java 时间类 Date 和 Calendar
在项目中获取一个yyyy-MM-dd HH:mm:ss格式的时间字符串 package org.htsg.kits; import java.text.SimpleDateFormat; import ...
- Java时间类从此变得清晰明了
Java时间类 Java时间类分为Date 日期类和Calendar 日历类,相信很多小伙伴在初学时会对这个两个类的用法.区别以及有什么联系会感到疑惑,似乎懂了,但又不能具体说清,今天再带你来清晰的再 ...
- java时间类简单总结
java时间类(Data类) 1.Data类(没有考虑到国际化,好多方法已过时java.util.Data包中) 父类(是类不是接口含有直接子类3个): 日期格式为:年月日时分秒(不包含毫秒部分) ...
- Java 时间类-Calendar、Date、LocalDate/LocalTime
1.Date 类 java.util.Date是一个"万能接口",它包含日期.时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪 ...
- Java常用类Date、Calendar、SimpleDateFormat详解
Date类 java.util 包提供了 Date 类来封装当前的日期和时间,Date 类提供两个构造函数来实例化 Date 对象 第一个构造函数使用当前日期和时间来初始化对象 Date( ) 第 ...
- java日历类(calendar),可输出年月日等等,以及和Date相互转化
日历创建对象: Calendar类为抽象类,不可实例化 方式一: 父类引用指向类对象 Calendar cal = new GregorianCalendar(); 方式二: Calendar ca ...
- Java 时间类
1.System 类 2.Date 类 3.SimpleDateFormate 类 4.Calendar 类 1.System 类 得到当前的时间值.System 类不能被实例化,需要通过它的静态方法 ...
- Java时间类总结
java.util.Date 包含有年月日时分秒,精确到毫秒级别. 官方解释: // The class Date represents a specific instant in time, wit ...
- Java时间类(转)
package com.chinagas.common.utils; import java.text.ParseException; import java.text.SimpleDateForma ...
随机推荐
- Openvswitch手册(5): VLAN and Bonding
我们这一节来看Port 一般来说一个Port就是一个Interface,当然也有一个Port对应多个Interface的情况,成为Bond VLAN Configuration Port的一个重要的方 ...
- 《响应式Web设计实践》学习笔记
原书: 响应式Web设计实践 目录: 第2章 流动布局 1. 布局选项 2. 字体大小 3. 网格布局 4. 混合固定宽度和流动宽度 第3章 媒介查询 1. 视口 2. 媒介查询结构 3. 内嵌样式与 ...
- 关于git的reset指令说明-soft、mixed、hard
在开发过程中,git的版本管理越来越普及.在版本管理中,最常用和最重要的是重置提交的版本,恢复后悔做了的事.大家都知道用reset命令.但是有几种形态需要整理共享一下,也方便我自己查阅. 一.首先解析 ...
- 6.listview显示不用条目
文件夹页面 布局只有一个listview,可以继承listactivity,这样少写一个布局文件 tool: * @param index 箱子的索引值 * @return * 对应的uri 或nul ...
- 某神秘公司 RESTful、共用接口、前后端分离、接口约定的实践
阅读本文大概需要 4.6 分钟. 本文来自 https://juejin.im/post/59eafab36fb9a045076eccc3 前言 随着互联网高速发展,公司对项目开发周期不断缩短,我们面 ...
- ubuntu双网卡配置,实现内网外网同时访问!
我们假定内网IP为:10.35.0.58,内网网关为:10.35.0.254:外网IP为222.76.250.4,外网网关为:222.76.250.1.其中局域名网需要连接:10.35.0.X,10. ...
- iReport 5.6.0 PDF导出中文不显示问题 解决方案
问题描述 iReport 5.6.0 PDF格式导出,中文不显示. 报错信息如下: Error exporting print... Could not load the following font ...
- Java核心技术及面试指南 面向对象部分的面试题总结以及答案
问题2.7.1,开放性问题,说一下你对面向对象思想的了解. 要点1,先说基础概念,比如面向对象思想包括封装.继承.多态,然后说些语法,比如可以通过extends继承类.通过implement来实现接口 ...
- Django--缓存设置
Django缓存机制 一. 缓存介绍 缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有人来访问这些数据时,则不再去执行数据库及渲染等操作,而是直接从内存或memcache的缓存中 ...
- mysql 导入 CSV文件命令行 ERROR 13 (HY000): Can't get stat of
一定要查看好CSV字段结构是否和文件的表结构字段一致 load data local infile 'F:/MySqlData/test1.csv' --CSV文件存放路径 into table st ...