学习Java日期处理,看见这一篇比较详细,转载之。

转自:http://www.cnblogs.com/hqr9313/archive/2012/04/19/2458221.html

 

时间日期
1)java中的时间类有:DateCalendar

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中的日期处理的更多相关文章

  1. Delphi与Java中的日期互换

    在最近做的一个项目中用到了Java和Delphi,发现它们不能正确读取对方的日期类型,如在Java中写入一个值为“2007-12-1”的日期值,通过Delphi读取却不是这个值了.通过查阅资料,发现两 ...

  2. Java中的日期操作

    在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...

  3. 填坑:Java 中的日期转换

    我们之前讨论过时间,在Java 中有一些方法会出现横线?比如Date 过期方法. 参考文章:知识点:java一些方法会有横线?以Date 过期方法为例 Java中的日期和时间处理方法 Date类(官方 ...

  4. 第七节:详细讲解Java中的日期,java.util.date

    前言 大家好,给大家带来详细讲解Java中的日期,java.util.date的概述,希望你们喜欢 类Date Java.lang.Object->java.util.Date public c ...

  5. Java中的日期和时间

    Java中的日期和时间 Java在java.util包中提供了Date类,这个类封装了当前的日期和时间. Date类支持两种构造函数.第一个构造函数初始化对象的当前日期和时间. Date() 下面的构 ...

  6. Java中的日期操作 分类: B1_JAVA 2015-02-16 17:55 6014人阅读 评论(0) 收藏

    在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...

  7. Java中的日期表示类

    一.概述 Java中的日期类设计的比较失败,刚开始使用Date来计算时间,后来大部分Date类的方法都过时了:想用Calendar类代替Date类,然而Calendar类也是不尽如人意.下面简单介绍下 ...

  8. java中获取日期和时间的方法总结

    1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下:  要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...

  9. Java中的日期处理类

    在Java中可以使用Date类和Calendar类来处理日期 但是Date类很多方法都过时了,推荐使用Canlendar类来处理日期,并对日期的格式化做了介绍.下面的部分将会逐一介绍 Date类 Ja ...

随机推荐

  1. 【CodeVS】1293

    输入输出样例 思路:看到题目我萌第一眼想到的肯定是求联通快对吧,但是这个联通快有点奇特,因为 这样他也算是一个联通快.解决此题其实有三种解法:1)宽搜(这个符合基本法):2)并查集:3)灌水法 但是蒟 ...

  2. action中list传到JSP中取不到值的问题

    今天遇到了这个问题 action中list传到JSP中取不到值 搞了半天是因为我在JSP中取值的的时候 <s:iterator  value="shlist" var=&qu ...

  3. WPS Office 二次开发简易教程。

    http://bbs.wps.cn/forum.php?mod=viewthread&tid=22004642

  4. ZendStudio9之SVN项目代码提示丢失解决

    前几天转移服务器,SVN 也重建了个,但用着重建的项目发现代码提示丢失了...好郁闷..搞了半天终于找到解决的方法了! 如果你还保留有以前的 SVN 项目本地完整备份,可以直接拷贝以下三个文件到新项目 ...

  5. odoo 获取当前会计年度

    odoo 获取当前会计年度 def default_fiscal_year(self): current_period = self.env['account.fiscalyear'].find() ...

  6. Python之软件管理

    常用软件包管理工具 一般python软件包管理工具,主要有以下: 图 常用python包管理工具 可以看到distribute是setuptools的替代方案(因为Setuptools包不再维护了), ...

  7. html-----vedio标签(HTML5新标签VIDEO在IOS上默认全屏播放)

    今天做一个app时发现一个问题,应用html5中的video标签加载视频,在Android手机上默认播放大小,但是换成iPhone手机上出问题了,默认弹出全屏播放,查找了好多论坛,都没有谈论这个的.然 ...

  8. Jstorm调度定制化接口(0.9.5 及高版本)

    从JStorm 0.9.0 开始, JStorm 提供非常强大的调度功能, 基本上可以满足大部分的需求. 在学习如何使用新调度前, 麻烦先学习 JStorm 0.9.0介绍 提供哪些功能 接口 设置每 ...

  9. bone collector hdu 01背包问题

    Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collec ...

  10. 一个view相对于屏幕或者另外一个view 的坐标

    如果想知道一个view相对于屏幕或者另外一个view 的坐标,那么可以通过如下的方法得到: UIWindow * window=[[[UIApplication sharedApplication] ...