java.util.Date

Date的每一个实例用于表示一个时间点
内部维护了一个long值,保存的是自1970年元旦到该Date表示的时间之间
经过的毫秒
Date存在时区的缺陷所以大部分操作时间的方法都被声明为过时的,不在建议使用了

因此,现在使用Date仅用来表示一个时间
毫秒变天 /1000/60/60/24 long值运算时加L
秒 分 时 天

Date date=new Date();
 long time=date.getTime();(获取当前时间的毫秒值,1970年到现在)
 date.setTime(0);(设置当前时间的毫秒值)

实现了get set方法以毫秒表示

SimpleDateFormat

java.text.SimpleDateFormat 该类可以将Date与String按照一个指定的日期格式进行互相转换
String format(Date date) 将给定的Date对象按照当前SDF指定的日期格式装换为字符串

y年 M月 d日 H时 m分 s秒 E星期

(获取时间)

		Date date = new Date();
		SimpleDateFormat simple = new SimpleDateFormat("yyyy年MM月dd日   HH时mm分ss秒    E");
		String data=simple.format(date);
		System.out.println(data);
将一个String通过SDF解析为一个Date

(设置时间)
	String str="2088-08-08 20:08:08";
	SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	/*
	* Date parse(String str)
	* 将给定的字符串按照当前SDF指定的格式解析为Date,如果给定的String格式与SDF格式不匹配时会抛出解析异常
	*/
	Date date=sdf.parse(str);
	System.out.println(date);

Calendar

java.util.Calendar 日历类

Calendar可以操作时间,是很常用的时间API

实现类:java.util.GregorianCalender 即:阳历
Calendar提供了静态方法getInstance来根据系统所在地区获取一个对应实现类
大部分获取的都是阳历

//日历类默认获取后表示的也是当前系统的时间
		Calendar calendar=Calendar.getInstance();

		//Calendar提供getTime,可以将当前Calendar表示的日期以Date形式返回
		Date date=calendar.getTime();

		//Calendar提供的setTime方法允许将当前Calendar表示的时间调整为给定的Date所表示的时间
		calendar.setTime(date);

Calendar提供了方法:
int get(int field)
可以根据给定的时间分量获取对应的值

不同的时间分量用不同的int值表示,Calendar提供了对应的常量
		//获取年
		int year=calendar.get(Calendar.YEAR);
		//获取月(月是从0开始的)
		int month=calendar.get(Calendar.MONTH)+1;
		//获取日
		/*
		 * 获取日
		 * 和“天”相关的常量
		 * DAY_OF_MONTH:月中的天
		 * DAY_OF_WEEK:周中的天
		 * DAY_OF_YEAR:年中的天
		 * DATE:与DAY_OF_MONTH一致
		 */
		int day=calendar.get(Calendar.DATE);
		System.out.println(year+"-"+month+"-"+day);
		
		int h=calendar.get(Calendar.HOUR_OF_DAY);
		int m=calendar.get(Calendar.MINUTE);
		int s=calendar.get(Calendar.SECOND);
		System.out.println(h+"-"+m+"-"+s);
		
		//一周的第一天是星期日
		int dow=calendar.get(Calendar.DAY_OF_WEEK)-1;
		String[] data= {"日","一","二","三","四","五","六"};
		System.out.println("星期"+data[dow]);
		
		int days=calendar.get(Calendar.DAY_OF_YEAR);
		System.out.println("今天是今年的第"+days+"天");
		
		//获取给定的时间分量所允许的最大值
		days=calendar.get(Calendar.DAY_OF_MONTH);
		System.out.println(days);

void set(int field,int value)
调整当前Calendar指定时间分量为给定的值

/ /调整年
		calendar.set(Calendar.YEAR, 2018);
		//调整月
		calendar.set(Calendar.MONTH, Calendar.AUGUST);

		//调整为当周的周五
		calendar.set(Calendar.DAY_OF_WEEK, 6);


void add(int field,int amount) 对指定的时间分量加上给定的值,若给定的值为负数则是减去操作

		//加3年2月25天,查看周五
		//加年
		calendar.add(Calendar.YEAR, 3);
		//加月
		calendar.add(Calendar.MONTH, 2);
		//加日
		calendar.add(Calendar.DAY_OF_YEAR, 25);

综合练习:

package date;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

/**
 * 计算商品促销日期
 * 程序启动后,输入商品的生产日期,格式:yyyy-MM-dd
 * 然后在输入一个整数位保质期的天数
 * 然后经过计算输出该商品促销日期,格式同上
 * 
 * 促销日计算规则:商品过期日前两周的周三
 * @author 秋水浮萍
 *
 */
public class Test2 {
	public static void main(String[] args) throws ParseException {
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入生产日期:");
		
		String birth=sc.nextLine();
		System.out.println("请输入过期时间:");
		int dead=sc.nextInt();
		
		Calendar calendar=Calendar.getInstance();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		Date date=sdf.parse(birth);
		calendar.setTime(date);
		
		calendar.add(Calendar.DAY_OF_YEAR,dead );
		calendar.add(Calendar.WEEK_OF_YEAR, -2);
		calendar.set(Calendar.DAY_OF_WEEK, 4);
		System.out.println(calendar.getTime());
	}
}