java中的日期操作

1. java.util.Date: Date的每一个实例用于表示一个确切的时间点。内部维护了一个long值,该值纪录的是从:1970年1月1日00:00:00到表示的时间点所经历的毫秒值。正数是70年以后的日期,负数则是70年以前的日期.由于Date设计上存在缺陷(时区,千年虫),所以他的大部分方法被设置为“过时的”,不再建议使用

		/*
		 * 使用默认构造方法创建的Date表示当前系统时间
		 */
		Date now=new Date();
		/*
		 * Date重写了toString,返回的字符串显示的就是当前Date表示的时间。格式:
		 * Mon Apr 06 11:11:29 CST 2020
		 * 对于非英语地区不够友好
		 */
		System.out.println(now);
		/*
		 * Date的大部分方法不建议使用了
		 */
		now.getYear();
		/*
		 * 获取Date内部维护的long值
		 */
		long time=now.getTime();
		System.out.println(time);
		
		//明天这一刻的毫秒值
		time+=1000*60*60*24;
		/*
		 * void setTime(long)
		 * 设置一个long值,使Date表示该long值所表示的时间
		 */
		now.setTime(time);
		System.out.println(now);

2. java.text.SimpleDateFormat: 根据一个给定的日期格式将String与Date相互转换.

		//当前系统时间
		Date now=new Date();
		System.out.println(now);//Sun Apr 05 11:31:55 CST 2020
		
		/*
		 * 2020-04-05 10:14:55
		 * yyyy-MM-dd HH:mm:ss
		 */
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		/*
		 * Date -> String   Date转化成字符串
		 * String format(Date date)
		 * format方法可以将给定的date对象所表示的时间按照SimpleDateFormat指定的日期格式转换为字符串
		 */
		String str=sdf.format(now);
		System.out.println(str);//2020-04-05 11:31:55
		
		
		/*
		 * 练习:查看当前系统时间和16天5小时23分40秒以后的日期
		 * 显示的格式:2020年04月05日 11:31:55
		 */
		Date date=new Date();
		SimpleDateFormat sdf1=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
		System.out.println(sdf1.format(date));
		
		long time=date.getTime();
		time+=1000*60*60*24*16;//16天
		time+=1000*60*60*5;//5小时
		time+=1000*60*23;//23分
		time+=1000*40;//40秒
		date.setTime(time);
		System.out.println(sdf1.format(date));

3. Date parse(String str): 从字符串转换为Date,将给定的字符串按照SimpleDateFormat指定的日期格式解析为一个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");
		//String -> Date 从字符串转换为Date
		Date date=sdf.parse(str);
		System.out.println(date);//Fri Aug 08 20:08:08 CST 2008	
		
		/*
		 * 练习:要求用户输入自己的生日,格式为:1992-07-13
		 * 经过计算,输出:到今天为止一共活了XXXX天
		 * 以及距离10000天还有多少天,生存10000天的纪念日是2018-12-05
		 */
		System.out.println("输入您的是生日:");
		Scanner scanner=new Scanner(System.in);
		String birStr=scanner.nextLine();//获取用户输入的生日值
		SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
		Date birth=sdf1.parse(birStr);
		//计算已经活了多少天
		Date now=new Date();
		long time=now.getTime()-birth.getTime();
		time=time/1000/60/60/24;
		System.out.println("恭喜你!到今天为止已经活了"+time+"天,请继续保持");
		time=10000-time;
		System.out.println("距离10000天,还有"+time+"天!");
		time=time*1000*60*60*24;
		now.setTime(now.getTime()+time);
		System.out.println("生存10000天的纪念日为:"+sdf1.format(now));
	}

4. java.util.Calendar 日历类: 该类是一个抽象类,封装了对时间的相关操作。 常用的实现类是格利高里日历(阳历),使用日历类是为了对时间进行相关的操作,比如计算时间.

public static void main(String[] args) {
		/*
		 * 使用Calendar的静态方法创建实例,
		 * 该方法会根据当前系统所在地区创建一个相应的实现,通常是GregorianCalendar
		 * 默认创建的日历实例表示当前系统时间 
		 */
		Calendar calendar=Calendar.getInstance();
		/*
		 * toString不能直观反映表示的日期
		 */
		System.out.println(calendar);
		/*
		 * Calendar与Date之间的转换
		 * Calendar->Date 
		 * Date getTime()
		 * Calendar提供了方法getTime(),
		 * 该方法返回一个Date对象,该对象表示的时间就是当前Calendar表示的时间
		 */
		Date date=calendar.getTime();
		System.out.println(date);
		//表示明天这一时刻
		date.setTime(date.getTime()+1000*60*60*24);
		System.out.println(date);
		
		/*
		 * Date -> Calendar
		 * void setTime(Date date)
		 * Calendar的setTime方法可以使当前Calendar表示给定的Date所表示的时间
		 */
		//Calendar也表示明天这一时刻
		calendar.setTime(date);
	}

5. void set(int field,int value): Calendar提供了针对不同时间分量单独设置值的方法,其中第一个参数为:时间分量,例如:年、月、日等等。第二个参数为对应的值. 时间分量是一个int值,使用Calendar提供的常量

		Calendar calendar=Calendar.getInstance();
		System.out.println(calendar.getTime());
		
		/*
		 * 设置Calendar,使其表示2008-08-08 20:08:08
		 */
		calendar.set(Calendar.YEAR, 2008);//设定年
		System.out.println(calendar.getTime());
		
		calendar.set(Calendar.MONTH, 7);//设定月,月从0开始,0表示1月;或者可以使用具体月的常量
		//calendar.set(Calendar.MONTH, Calendar.AUGUST);设定月,可以使用具体月的常量
		System.out.println(calendar.getTime());
		
		/*
		 * 设定日,对应的时间分量常用的
		 * DATE:月中天
		 * DAY_OF_MONTH:月中的天,与DATE一致
		 * DAY_OF_WEEK:周中的天,星期几
		 * DAY_OF_YEAR:年中的天
		 */
		calendar.set(Calendar.DAY_OF_MONTH, 8);//设定日
		System.out.println(calendar.getTime());
		
		calendar.set(Calendar.HOUR_OF_DAY, 20);//设定时
		System.out.println(calendar.getTime());
		
		calendar.set(Calendar.MINUTE, 8);//设定分
		System.out.println(calendar.getTime());
		
		calendar.set(Calendar.SECOND, 8);//设定秒
		System.out.println(calendar.getTime());


6. 获取一个Calendar表示的日期中各个时间分量对应的值

		Calendar calendar=Calendar.getInstance();
		/* int get(int field)
		 * 获取对应时间分量的值
		 */
		int year=calendar.get(Calendar.YEAR);//获取年
		int month=calendar.get(Calendar.MONTH)+1;//获取月
		int day=calendar.get(Calendar.DATE);//获取日
		System.out.print(year+"-"+month+"-"+day+"  ");
		int hour=calendar.get(Calendar.HOUR);
		int minute=calendar.get(Calendar.MINUTE);
		int second=calendar.get(Calendar.SECOND);
		System.out.print(hour+":"+minute+":"+second+"  ");
		
		//查看星期几 dow=day of week
		int dow=calendar.get(Calendar.DAY_OF_WEEK);
		String[] date={"日","一","二","三","四","五","六"};
		System.out.println("周"+date[dow-1]);
		
		//到今天为止,今年已经过了多少天  doy=day of year
		int doy=calendar.get(Calendar.DAY_OF_YEAR);
		System.out.println(year+"已经过了"+doy+"天");

7. 获取某一个时间分量所允许的最大值

		Calendar calendar=Calendar.getInstance();
		//当月总共多少天
		int days=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		System.out.println(days);
		//查看2016年2月多少天、
		calendar.set(Calendar.MONTH,1);//月份从0开始
		days=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		System.out.println(days);
		//今年总共多少天
		days=calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
		System.out.println("今年一共"+days+"天");

8. void add(int field,int value): Calendar中计算时间的方法,对给定的时间分量加上给定的值,若给定的值是负数,则是减去给定的值.

		/*
		 * 查看3年2个月零一天以后的日期
		 */
		Calendar calendar=Calendar.getInstance();
		//查看三年后
		calendar.add(Calendar.YEAR, 3);
		System.out.println(calendar.getTime());
		//查看2个月后
		calendar.add(Calendar.MONTH, 2);
		System.out.println(calendar.getTime());
		//查看8天以后
		calendar.add(Calendar.DAY_OF_YEAR, 8);
		System.out.println(calendar.getTime());
		//查看5小时以前
		calendar.add(Calendar.HOUR_OF_DAY, -5);
		System.out.println(calendar.getTime());
	
		/*
		 * 当遇到类似开发要求:
		 * 要求用户输入一个日期,然后对该日期进行一系列的运算,再将计算后的日期显示给用户时。流程如下:
		 * 1.获取用户输入的日期字符串
		 * 2.使用SimpleDateFormat将其转换为Date
		 * 3.创建一个Calendar,使其表示Date表示的日期
		 * 4.使用Calendar根据需求计算时间
		 * 5.将Calendar转换为一个Date
		 * 6.使用SimpleDateFormat将Date转化为字符串后显示给用户
		 */
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值