java中的日期处理
学习Java日期处理,看见这一篇比较详细,转载之。
转自:http://www.cnblogs.com/hqr9313/archive/2012/04/19/2458221.html
时间日期
1)java中的时间类有:Date和Calendar
2)java中时间类的本质 long(毫秒数)
Date = long +历法算法(方法gerYear())
Calendar = long +历法算法(方法ger())
3) 时间的标准有两种
(1970)GMT long
(0)UTC long
4) java中基本的时间表示GMT long
5) java提供了Date类型表示时间和日期
Date 是long 类型的包装
6) Calendar 是历法的抽象
历法:公历,农历,太阳历
7) GregorianCalendar是历法的实现,采用公历的算法实现的
Calendar cal = Calendar.getInstance();
Calendar cal = new GregorianCalendar();//除了日本和泰国,效果等同于上一句
8) Date和 Calendar的默认值就是系统当前时间
一 java中表示时间的方式:
1) 格林威治时间(GMT):1970年1月1日 00:00:00(注:中国是东八区,所以要+8个小时)
也就是1970年1月1日 08:00:00
2 )公元元年(UTC): 0年
3 )目前java中3种日期表达方式long, Date , Calendar都在用
1 例子
2 import java.util.Calendar;
3 import java.util.Date;
4 import java.util.GregorianCalendar;
5
6 public class LongDateDemo {
7 public static void main(String[] args) {
8 long now = System.currentTimeMillis();
9 long year = now/1000/60/60/24/365 +1970;
10 System.out.println(year);
11 //一年 地球绕太阳一圈(365天+1/4天)
12 //原点(公元元年)
13
14 /* date.getYear()是将date内部的long时间,根据历法计算
15 * 为年份,返回值是2位数年份,如:1997年返回97,但是过了
16 * 2K年,返回3位数年份,如2012返回112
17 */
18
19 //老板本
20 Date date = new Date();//默认是当前时间(long)
21 int y = date.getYear()+1900;
22 int month = date.getMonth()+1;
23 System.out.println(y+"年"+month+"月");
24
25 //新版本
26 //Calendar 历法
27 Calendar cal = new GregorianCalendar();//默认是当前时间(long)
28 y = cal.get(Calendar.YEAR);//2012
29 month = cal.get(Calendar.MONTH)+1;//4
30 System.out.println(y+"年"+month+"月");
31
32
33 }
34
35 }
二 时间类型转换 long <-> Date <-> Calendar
long --->Date : dat = new Date(l)
dat.setTime(l)
Date --->Calendar : cal.setTime(dat)
Calendar ---> Date: cal.getTime()
Date ---> long :dat.getTime()
注:Date dat , long l ,Calendar cal
例子
1 import java.util.Calendar;
2 import java.util.Date;
3 import java.util.GregorianCalendar;
4
5 /**
6 * 时间的类型转换
7 */
8 public class DateCaseDemo {
9 public static void main(String[] args) {
10 long gmt = 0;//格林威治时间 1970/01/01
11
12 Date date = new Date();
13 date.setTime(gmt);//回到1970 元旦,相当于long -->Date
14 System.out.println(date.getYear()+1900);//1970
15
16 Calendar cal = new GregorianCalendar();
17 //date --> cal
18 cal.setTime(date);//将cal设置为date的时间,也是1970
19 System.out.println(cal.get(Calendar.YEAR));//1970
20 //date 和 cal ,gmt 代表同一时刻
21 //加-1天,是在当前时间上加-1天,就是减少1天,就是减少1天的毫秒数(1000*60*60*24)
22 cal.add(Calendar.DAY_OF_YEAR,-1);
23 Date d = cal.getTime();
24 System.out.println(d);//1969
25 long l = d.getTime();
26 System.out.println(l);//-86400000,因为是在原点以前的时间
27
28
29 }
30
31 }
三 时间的输入与输出
1) 日期输出的本质是将Date转换为格式化的String
2) 日期输入的本质是将格式化的 String转换为 Date
3) SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
构建SimpleDateFormat 一般提供日期的格式"yyyy-MM-dd"具体参看javadoc
如:"yyyy-MM-dd HH:mm:ss"
"yyyyMMdd"
"dd/MM/yy"
"MM/dd/yyyy"
常用方法
fmt.parse(String) 可以实现将(合法)字符串解析为日期类型,经常用于处理日期输入
fmt.format(Date) 可以把日期格式化为字符串用于输出处理
使用字符串String输出时间
Date ---> String:
DateFormat fmt = new SimpleDateFormat("HH:mm:ss");
fmt.format(date)
把字符串String时间转为Date时间(个是必须相同)
String --> Date :
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
fmt.parse("1999-2-2")
注:java没有提供String直接转换为Calendar的API方法,但第三方提供的API有这种方法
如果Calendar需要转为String,必须先转换为Date
Calendar ----> Date :
Date dat = cal.getTime();
例子
1 import java.text.ParseException;
2 import java.text.SimpleDateFormat;
3 import java.util.Date;
4
5 public class DateIODemo {
6 public static void main(String[] args) throws ParseException {
7 Date date = new Date();//当前时间,当前毫秒数
8 //输出yyyy-MM-dd HH:mm:ss
9 SimpleDateFormat fmt =
10 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
11 //将日期类型格式化为时间字符串
12 String str = fmt.format(date);//日期格式化
13 System.out.println(str);//2012-12-21 00:00:00
14 //解析日期字符串为日期类型对象
15 String day = "2012-12-21";
16 SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
17 Date d = f.parse(day);//将日期字符串解析为毫秒数
18 long l = d.getTime();
19 System.out.println(fmt.format(d));
20 String s = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
21 System.out.println(s);//2012-04-18
22 }
23
24 }

四 时间的计算
时间计算的问题
1) 本质是时间毫秒数的计算
2) 简单时间计算,直接计算毫秒数,如:3天以后,2小时等
3) 复杂时间计算,利用Calender类提供的历法算法实现
常用方法:
add() set()
Calendar 提供的方法本是上也是计算毫秒数,
例子
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar; public class DateCalDemo {
public static void main(String[] args) {
//简单时间计算
long l = System.currentTimeMillis();//当前时间
l += 1000L*60*60*24*3;//3天以后
SimpleDateFormat sdm = new SimpleDateFormat("yyyy-MM-dd");
String s = sdm.format(new Date(l));
System.out.println(s);
//复杂时间计算
Calendar cal = new GregorianCalendar();
cal.add(Calendar.YEAR, 2);//2年以后
cal.set(Calendar.MONTH,Calendar.JANUARY);//设置月份为1月
System.out.println(sdm.format(cal.getTime()));//2年以后的1月 }
} 例子2
package com.tarena.day16; import java.util.Calendar;
import java.util.Date; public class SpecialDateDemo {
public static void main(String[] args) { }
/**
* 计算商品的促销日期special Date,规则:商品过期前两周五促销
* @param creat
* @param months
* @return
*/
public static Date special(Date creat,int months){
Calendar cal = Calendar.getInstance();
cal.setTime(creat); //生产日期
cal.add(Calendar.MONTH, months); //过期日
cal.add(Calendar.WEEK_OF_YEAR, -2); //回调2周
if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){//如果是星期天
cal.add(Calendar.WEEK_OF_YEAR, -1);//回调一周
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);//调到本周的周五
}
return cal.getTime();
} }
java中的日期处理的更多相关文章
- Delphi与Java中的日期互换
在最近做的一个项目中用到了Java和Delphi,发现它们不能正确读取对方的日期类型,如在Java中写入一个值为“2007-12-1”的日期值,通过Delphi读取却不是这个值了.通过查阅资料,发现两 ...
- Java中的日期操作
在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...
- 填坑:Java 中的日期转换
我们之前讨论过时间,在Java 中有一些方法会出现横线?比如Date 过期方法. 参考文章:知识点:java一些方法会有横线?以Date 过期方法为例 Java中的日期和时间处理方法 Date类(官方 ...
- 第七节:详细讲解Java中的日期,java.util.date
前言 大家好,给大家带来详细讲解Java中的日期,java.util.date的概述,希望你们喜欢 类Date Java.lang.Object->java.util.Date public c ...
- Java中的日期和时间
Java中的日期和时间 Java在java.util包中提供了Date类,这个类封装了当前的日期和时间. Date类支持两种构造函数.第一个构造函数初始化对象的当前日期和时间. Date() 下面的构 ...
- Java中的日期操作 分类: B1_JAVA 2015-02-16 17:55 6014人阅读 评论(0) 收藏
在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...
- Java中的日期表示类
一.概述 Java中的日期类设计的比较失败,刚开始使用Date来计算时间,后来大部分Date类的方法都过时了:想用Calendar类代替Date类,然而Calendar类也是不尽如人意.下面简单介绍下 ...
- java中获取日期和时间的方法总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...
- Java中的日期处理类
在Java中可以使用Date类和Calendar类来处理日期 但是Date类很多方法都过时了,推荐使用Canlendar类来处理日期,并对日期的格式化做了介绍.下面的部分将会逐一介绍 Date类 Ja ...
随机推荐
- 【CodeVS】1293
输入输出样例 思路:看到题目我萌第一眼想到的肯定是求联通快对吧,但是这个联通快有点奇特,因为 这样他也算是一个联通快.解决此题其实有三种解法:1)宽搜(这个符合基本法):2)并查集:3)灌水法 但是蒟 ...
- action中list传到JSP中取不到值的问题
今天遇到了这个问题 action中list传到JSP中取不到值 搞了半天是因为我在JSP中取值的的时候 <s:iterator value="shlist" var=&qu ...
- WPS Office 二次开发简易教程。
http://bbs.wps.cn/forum.php?mod=viewthread&tid=22004642
- ZendStudio9之SVN项目代码提示丢失解决
前几天转移服务器,SVN 也重建了个,但用着重建的项目发现代码提示丢失了...好郁闷..搞了半天终于找到解决的方法了! 如果你还保留有以前的 SVN 项目本地完整备份,可以直接拷贝以下三个文件到新项目 ...
- odoo 获取当前会计年度
odoo 获取当前会计年度 def default_fiscal_year(self): current_period = self.env['account.fiscalyear'].find() ...
- Python之软件管理
常用软件包管理工具 一般python软件包管理工具,主要有以下: 图 常用python包管理工具 可以看到distribute是setuptools的替代方案(因为Setuptools包不再维护了), ...
- html-----vedio标签(HTML5新标签VIDEO在IOS上默认全屏播放)
今天做一个app时发现一个问题,应用html5中的video标签加载视频,在Android手机上默认播放大小,但是换成iPhone手机上出问题了,默认弹出全屏播放,查找了好多论坛,都没有谈论这个的.然 ...
- Jstorm调度定制化接口(0.9.5 及高版本)
从JStorm 0.9.0 开始, JStorm 提供非常强大的调度功能, 基本上可以满足大部分的需求. 在学习如何使用新调度前, 麻烦先学习 JStorm 0.9.0介绍 提供哪些功能 接口 设置每 ...
- bone collector hdu 01背包问题
Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collec ...
- 一个view相对于屏幕或者另外一个view 的坐标
如果想知道一个view相对于屏幕或者另外一个view 的坐标,那么可以通过如下的方法得到: UIWindow * window=[[[UIApplication sharedApplication] ...