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. 时间的类型转换
 
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


  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值