一 ,时间日期
1) Java中的时间类有:Date和Calendar2) Java中时间类的本质
Date = long + 操作
Calendar = long + 操作
3) 时间的标准有两种
(1970)GMT long
(0)UTC long
4) java 中基本的时间表示 GMT long
5) Java提供了Date类型表示时间和日期
Date 是long类型的包装
6) Calendar 是历法的的抽象
历法:公历、农历、太阳历 ...
7 ) GregorianCalendar 是历法的实现,采用公历(太阳历)算法实现的
Calender cal = Calender.getInstance();
8) Date 和 Calendar 的默认值就是系统当前时间
1.1. Java中表示时间的方式
【案例】long、Date、Calendar演示
package bbs.itheima.com;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class LongDemo {
public static void main(String[] args){
// 从格林威治时间到当前系统时间的毫秒数
long now = System.currentTimeMillis();
// 计算现在的年份(不考虑轮年)
long year = 1970+now/1000/60/60/24/365;
System.out.println(year);//2013
// 当前时间(公历)
Date date = new Date(now);
int y = date.getYear()+1900;
System.out.println("y="+y);//2013
System.out.println(date);//Sat Apr 13 22:38:29 CST 2013
// Calendar抽象历法
// GregorianCalendar 格里高历(公元历法)
// GregorianCalendar =GMT long+公历算法
Calendar cal = new GregorianCalendar();
Date date2 = new Date();
System.out.println(date2);//Sat Apr 13 23:09:09 CST 2013
System.out.println(
(date2.getYear()+1900)+","
+(date2.getMonth()+1));//2013,4
// Calendar 没有千年虫问题,不用加“偏移量”1900,
Calendar date3 = new GregorianCalendar(1970,
Calendar.JANUARY,1);
System.out.println((date3.get(Calendar.YEAR)+","+
(date3.get(Calendar.MONTH)+1)));//1970,1
}
}
1.2. 时间的类型转换
now表示当前时间
【案例】时间类型转换
package bbs.itheima.com;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**时间类型转换*/
public class DateConvertDemo {
public static void main(String[] args) {
//演示long->Date->Calendar
//GMT 原点 ,1970.1.1 0:0:0
long time = 0;
//现在时间
Date date = new Date();
System.out.println(date);//Sat Apr 13 23:22:03 CST 2013
//long->Date,更改time的时间为(1970.1.1 0:0:0)
date.setTime(time);
//会出现懂八区现象(多8个小时)
System.out.println(date);//Thu Jan 01 08:00:00 CST 1970
//现在时间
Calendar cal = new GregorianCalendar();
System.out.println(cal);
//Date->Calendar 更该为time的时间
cal.setTime(date);
cal.add(Calendar.DAY_OF_YEAR, -1);
//演示 Calendar->Date->long
// 一天的毫秒数 86400000
System.out.println(1000*60*60*24);
// Calendar->Date
Date d = cal.getTime();
System.out.println(d);//Wed Dec 31 08:00:00 CST 1969
//Date->long
long l = d.getTime();
System.out.println("l="+l);//l=-86400000
}
}
1.3. 日期的输入与输出
1) 日期输出的本质是将Date转换为格式化的String
2) 日期输入的本质是将格式化的String转换为Date
3) java.text.SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
日期的输入与输出
日期输出的本质是 Date 转换为格式化的String 日期输入的本质是 将格式化的String转换为Date java.text.SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
构建SimpleDateFormat 一般提供日期的格式"yyyy-MM-dd" 具体参看 javadoc
如: "yyyy-MM-dd HH:mm:ss"
"yyyyMMdd" "dd/MM/yyyy" "MM/dd/yyyy"
fmt.parse(String)可以实现将(合法)字符串解析为日期类型, 经常用于处理日期输入
fmt.format(Date)可以把日期格式化为字符串用于输出处理
日期的输入与输出
案例 商品促销日期计算
package bbs.itheima.com;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**商品促销日期计算*/
public class PrDateDemo {
public static void main(String[] args) throws Exception {
String d = "2013-05-01";
SimpleDateFormat fmt =
new SimpleDateFormat("yyyy-MM-dd");
Date date = fmt.parse(d);
Date spec = specialDay(date,3);
String s = fmt.format(spec);
System.out.println("促销日期:"+s);
}
public static Date specialDay(Date proc,int exp){
Calendar cal = new GregorianCalendar();
cal.setTime(proc);
cal.add(Calendar.MONTH, exp);
cal.add(Calendar.WEEK_OF_YEAR,-2);
cal.set(Calendar.DAY_OF_WEEK,Calendar.FRIDAY);
return cal.getTime();
}
}
运行结果:
促销日期:2013-07-19