学习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. PHP多维数组元素操作类

    我的框架里面一个多维数组元素操作类,主要用于读取数组中配置数据,可以通过字符串节点的方式:a.b.c 来获取和设置元素,以及多维数组的覆盖,有需求的可以参考下吧! <?php /** * Cre ...

  2. How to use dt.Rows.Cast<System.Data.DataRow>().Take(n)

    参考文章:http://stackoverflow.com/questions/2787458/how-to-select-top-n-rows-from-a-datatable-dataview-i ...

  3. JQuery基础知识(1)

    JQuery基础知识(1) 对JQuery学习中遇到的小细节进行了整理和总结 1.JQuery hide()和show()方法,分别对选中的元素进行隐藏和显示,语法:hide()和show分别有对应的 ...

  4. Xtrabackup 使用stream输出并压缩备份

    mysql:5.6.29xtrabackup:2.2.10mysql数据目录:/data/mysqlmysql备份目录:/data/dbbak/full #确保有足够的磁盘空间 1.安装依赖 yum ...

  5. 传统flv网页视频(flvplayer)--兼容

    1.flv网页视频 项目中需要web打开视频,百度搜了好几个插件,本来是打算用H5 vedio,但是客户的浏览器用的比较老,如果用H5标签的话,IE9以下的浏览器是不支持的.所以费劲又去找了其他插件. ...

  6. linux 学习-用户&群组&权限

    Linux用户&群组&权限  ⦁ Linux安全性模型   1)Linux使用User和Group控制使用者对文件的存取权限   2)用户使用账号和口令登录Linux   3) ...

  7. asp.net网站发布到服务器GET的技能

    刚刚知道映射网络驱动器的作用(虽然才知道,但是我高兴) 把服务器上的硬盘或者其他电脑共享给你的盘映射到本地,就和操作本地硬盘一样. 双击计算机->映射网络驱动器->上面选择驱动器号 下面文 ...

  8. aop为系统添加操作日志,注入或配置声明的方式来实现

    最近做项目实现操作记录添加日志,由于aop这两种实现方式各有优缺点,所以都实现了一下以后根据具体业务选择. 1实现方式一注入: 1.1首先在xml中开启aop注入,需要引入的包此处省略,可百度自己查找 ...

  9. C# SessionHelper

    using System.Web; using System.Web.SessionState; namespace Utils { /// <summary> /// Session帮助 ...

  10. Python学习笔记——进阶篇【第八周】———进程、线程、协程篇(Socket编程进阶&多线程、多进程)

    本节内容: 异常处理 Socket语法及相关 SocketServer实现多并发 进程.线程介绍 threading实例 线程锁.GIL.Event.信号量 生产者消费者模型 红绿灯.吃包子实例 mu ...