学习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. oracle数据库连接串格式

    oracle常用链接串格式:jdbc:oracle:thin:@//<host>:<port>/<service_name> jdbc:oracle:thin:@& ...

  2. 【01背包】HDU 2602 Bone Collector (模板题)

    Problem Description Many years ago , in Teddy's hometown there was a man who was called "Bone C ...

  3. Objective-C运行时态消息传递--拼接方法名

    做IOS开发的人都知道,Objective-C语言中方法的调用是运行时采取绑定的,在编译过程中只声明该方法的存在. 那么我们来简单说下在运行时,类的消息传递. 在运行时,每个方法如[self meth ...

  4. http状态码200,300,404等是什么意思

    在学习网页设计的时候都应该知道状态码,但我们常见的状态码都是200,404,下面介绍其他的状态值 1开头的http状态码 表示临时响应并需要请求者继续执行操作的状态代码. 100   (继续) 请求者 ...

  5. Linux学习笔记-epoll

    #include <sys/epoll.h> epoll是Linux内核的一个系统调用,一种可扩展的I/O事件通知机制,最早在Linux内核2.5.44版本引入. 它的功能是监视多文件描述 ...

  6. logstash通过kafka传输nginx日志(三)

    单个进程 logstash 可以实现对数据的读取.解析和输出处理.但是在生产环境中,从每台应用服务器运行 logstash 进程并将数据直接发送到 Elasticsearch 里,显然不是第一选择:第 ...

  7. Arch安装KDE5

    plasma desktop Install the plasma-meta meta-package or the plasma group. Alternatively, for a more m ...

  8. trove instance service 总结

    def create(self, req, body, tenant_id): # TODO(hub-cap): turn this into middleware LOG.info(_LI(&quo ...

  9. 2、表单form

    只要使用input,就用form,使用方法是在所有的input之外加一个总的form双标签 切记给每个input都加name,提交表单时同时会提交name属性 input可以做的事:文本框.密码框.单 ...

  10. 手机浏览器wap网页点击链接触发颜色区块的问题解决办法

    引子 在做HTML5 WAP网页的时候,一行内容做了2个链接,点击一个标签的时候,整个颜色块会闪一下,影响美观.需求针对这种情况来问我,能否把这个一闪的颜色去掉.我当时就想,这个怎么去?那我也不好直接 ...