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());
}
}