Java核心类库——时间Date和Calendar

2017-01-13 15:07:59来源:csdn作者:qq_35101189人点击

第七城市



学习Java的同学注意了!!!学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:183993990 我们一起学Java!


时间日期1)java中的时间类有:Date和Calendar


2)java中时间类的本质 long(毫秒数)Date = long +历法算法(方法gerYear())Calendar = long +历法算法(方法ger())


3) 时间的标准有两种(1970)GMT long(0)UTC long4) java中基本的时间表示GMT long5) 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:002 )公元元年(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 {
7public 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 <-> Calendarlong --->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 {
9public 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转换为格式化的String2) 日期输入的本质是将格式化的 String转换为 Date3) 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,必须先转换为DateCalendar ----> 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 {
6public static void main(String[] args) throws ParseException {
7 Date date = new Date();//当前时间,当前毫秒数
8 //输出yyyy-MM-dd HH:mm:ss
9 SimpleDateFormat fmt =
10new 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的同学注意了!!!学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:183993990 我们一起学Java!



第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台