对时间的各种操作

 java.util.Calendar 日历类
 Calendar是一个抽象类,规定了操作日期的相关方法。
 由于不同的日期历法对日期的计算不同,需要靠不同的子类去实现这些方法。
 常用的实现类:java.util.GregorianCalendar,即 阳历
 Calendar提供了一个静态方法:getInstance()可以获取一个当前系统所在地区适用的实现类,大部分获取的都是阳历实现类。 

Calendar calendar = Calendar.getInstance();
/*
 * toString可读性差
 */
System.out.println(calendar);

Calendar提供了一个可以转换为Date的方法:
Date getTime()   //将当前Calendar表示的时间以Date形式返回。

Date date = calendar.getTime();
System.out.println(date);

也提供了一个可以让Calendar表示指定日期的方法:
void setTime(Date date)
是当前Calendar表示给定的Date所表示的日期

 

 Calendar的get方法
 int get(int field)    //该方法可以获取指定的时间分量所对应的值。
 时间分量是一个int值,不同值表示不同时间分量,无需记忆这些数具体是多少,Calendar提供了对应的常量。

Calendar calendar = Calendar.getInstance();

//获取年
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 date = calendar.get(Calendar.DATE);
System.out.println(year+"-"+month+"-"+date);

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);
/*
 * 根据当前Calendar表示的日期获取指定时间分量
 * 所允许的最大值
 * 今年总共多少天?
 */
int days = calendar.getActualMaximum(
	Calendar.DAY_OF_YEAR
);
System.out.println("今年共:"+days+"天");

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

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
/*
 * 查看3年2个月零25天以后所在周的周三是哪天?
 */
//加3年
calendar.add(Calendar.YEAR, 3);
//加2个月
calendar.add(Calendar.MONTH, 2);
//加25天
calendar.add(Calendar.DAY_OF_YEAR, 25);
System.out.println(calendar.getTime());

calendar.set(Calendar.DAY_OF_WEEK, 4);
System.out.println(calendar.getTime());

Calendar的set方法 

可以对指定时间分量设置对应的值:
void set(int field,int value)

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());

/*
 * 设置Calendar为2008-08-08 20:08:08
 */
//设置年
calendar.set(Calendar.YEAR, 2008);
//设置月
calendar.set(Calendar.MONTH, Calendar.AUGUST);
//设置日
calendar.set(Calendar.DAY_OF_MONTH,8);

calendar.set(Calendar.HOUR_OF_DAY,20);
calendar.set(Calendar.MINUTE,8);
calendar.set(Calendar.SECOND,8);
System.out.println(calendar.getTime());

/*
 * 设置为周4
 * 按照西方的标准,一周的第一天为周日
 */
calendar.set(Calendar.DAY_OF_WEEK, 5);
System.out.println(calendar.getTime());

java.util.Date
Date的每一个实例用于表示一个确切的时间。内部维护的一个long值,该值为1970年1月1日 00:00:00到当前
Date所表示的时间之间所经过的毫秒。
 由于Date设计时存在时区问题,所以大部分操作时间的方法都被声明为过时的,不再建议使用。

//默认实例化表示当前系统时间
Date date = new Date();
System.out.println(date);
//获取Date内部维护的long值
long time = date.getTime();
		
time += 1000*60*60*24;
//可以设置一个long指使Date表示该日期
date.setTime(time);
		
System.out.println(date);

 SimpleDateFormat的format 将给定的Date按照当前SDF指定的日期格式转换为对应内容的字符串

Date date = new Date();
System.out.println(date);		

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//String format(Date date)将给定的Date按照当前SDF指定的日期格式转换为对应内容的字符串
String str = sdf.format(date);
System.out.println(str);

 SimpleDateFormat的parse将一个字符串按照对应的日期格式解析为Date  需要抛异常

public static void main(String[] args) throws ParseException {
	String str = "2008-08-08 20:08:08";
		
	SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	Date date = sdf.parse(str);
		
	System.out.println(date);
}

输入自己的生日,然后经过程序计算,输出到今天为止一共活了多少天
例如:
1992-08-02
计算后输出到今天为止共活了xxxx天
再输出出生10000天的纪念日为哪天?
格式还是:yyyy-MM-dd

Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的生日:");
String birthStr = scanner.nextLine();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date birth = sdf.parse(birthStr);
Date now = new Date();

long time = now.getTime()-birth.getTime();
//换算成天
time = time/1000/60/60/24;
System.out.println("恭喜您!一共活了"+time+"天,请继续保持!");

//计算10000天纪念日
time = birth.getTime()+1000L*60*60*24*10000;
Date date = new Date(time);

String str = sdf.format(date);
System.out.println("您出生10000天的纪念日为:"+str);

计算商品促销日期
促销日计算规则:该商品过期日前两周的周三
程序启动后,要求用户输入商品的生产日期,格式为:yyyy-MM-dd
然后再输入保质期的天数
然后经过计算,输出该商品促销日期,输出的格式是:yyyy-MM-dd

Scanner scanner = new Scanner(System.in);
System.out.println("请输入生产日期:");
String dateStr = scanner.nextLine();	
System.out.println("请输入保质期天数:");
int days = Integer.parseInt(scanner.nextLine());	
//得到生产日期的Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(dateStr);
Calendar calendar = Calendar.getInstance();
//让Calendar表示生产日期
calendar.setTime(date);	
//计算过期日
calendar.add(Calendar.DAY_OF_YEAR, days);
//减去2周
calendar.add(Calendar.DAY_OF_YEAR, -14);
//设置为当周的周三
calendar.set(Calendar.DAY_OF_WEEK, 4);

date = calendar.getTime();
String str = sdf.format(date);
System.out.println("促销日为:"+str);

 两个字符创类型的时间进行比较

    //当前时间与过期时间进行比较
	public static boolean warnning(String day,String period) throws ParseException{
		int month = Integer.parseInt(period);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = sdf.parse(day);
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		//加上周期(月),为到期日
		calendar.add(Calendar.MONTH, month);
		//设置为过期日的前15天
		calendar.add(Calendar.DAY_OF_YEAR, -15);
		//获取提醒的时间
		date = calendar.getTime();
		//提醒时间字符串
		String time = sdf.format(date);
		Date d = new Date();
		//当前时间字符串
		String now = sdf.format(d.getTime());
		//比较时间
		int result = time.compareTo(now);
		if(result>=0){
			//到了提醒时间
			return true;
		}else{
			//没到提醒时间
			return false;
		}
		
		
	}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值