Java日期处理
来源:互联网 发布:淘宝网店活体开店费用 编辑:程序博客网 时间:2024/06/11 01:16
学习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返回11217 */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);//201229 month = cal.get(Calendar.MONTH)+1;//430 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/0111 12 Date date = new Date();13 date.setTime(gmt);//回到1970 元旦,相当于long -->Date14 System.out.println(date.getYear()+1900);//197015 16 Calendar cal = new GregorianCalendar();17 //date --> cal18 cal.setTime(date);//将cal设置为date的时间,也是197019 System.out.println(cal.get(Calendar.YEAR));//197020 //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);//196925 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:0014 //解析日期字符串为日期类型对象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-1822 }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月 }}例子2package 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中的日期处理
- Java日期处理
- Java日期时间处理
- java/oracle日期处理
- Java日期处理
- Java中的日期处理
- java中的日期处理
- JAVA 日期处理大全
- Java日期的处理
- Java 的 日期处理
- java的日期处理
- java 日期处理
- java日期型处理
- JAVA日期处理相关
- Java日期处理
- java中的日期处理
- Java日期时间处理
- Java日期处理
- Exception loading sessions from persistent storage解决
- jsp中的Jstl中“$”与JQuery中的“$”冲突问题
- MFC 自定义消息的一般过程
- Windows下用Eclipse开发Hadoop程序遇到的问题及解决方法
- ./configure && make && make install详解
- Java日期处理
- 反转链表[递归,非递归]
- Hadoop 2.0 计数器
- asp.net mvc1 mvc2 mvc3 mvc4 特
- S3C2440 Linux驱动移植——LCD
- 用两个栈实现队列
- 移动开发四国语言概览三:数据类型与常量、变量(上)
- PL/SQL学习二
- C语言 运算符优先级