黑马程序员——java中的时间日期

时间:2022-09-16 00:43:14
------- android培训java培训、期待与您交流! ----------


一 ,时间日期

1) Java中的时间类有:Date和Calendar
2) 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. 时间的类型转换
  黑马程序员——java中的时间日期
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)可以把日期格式化为字符串用于输出处理
日期的输入与输出

黑马程序员——java中的时间日期

案例  商品促销日期计算

 
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