Java日期时间类必看必学

一个程序员小白,希望和大家一起进步,一起学习

如果文章那些地方有错误,希望大家及时指正,如果您认为我写的不错,不妨点个赞再走

日期和时间API

第一代:java.util.Date

第一代中现在还经常使用的方法:

(1).无参构造方法
//用来获取当前的系统时间
 Date date = new Date(); 
(2). long Date对象.getTime()
获取1970年1月1日8:00到Date对象已过的毫秒数
//用来获取当前的系统时间
 Date date = new Date(); 
 //获取1970年1月1日8:00到Date对象已过的毫秒数,返回值类型为long
 long time = date.getTime();
(3).new Date(long time)
把时间类型(数值类型,既是把从1970年1月1日8:00已过的时间值)的时间转化为日期类型
		Date future = new Date(Long.MAX_VALUE);
		System.out.println(future);

第二代 java.util.calendar

calendar是一个抽象类不能被直接实例化,所以我们只能使用其实例化的子类对象

子类:GregorianCalendar

(1)用getInstance()获取日历
(2)get常量名获取具体的时间
	@Test
	public void test2() {
		//使用默认的时区和语言环境获得一个日历
		Calendar calendar = Calendar.getInstance();
		System.out.println(calendar);

		int year = calendar.get(Calendar.YEAR);
		int month = calendar.get(Calendar.MONTH)+1;
		
		//在格里高利历中每一年的第一个月是0月所以在算月份的时候要+1
		System.out.println("年份"+year+"月份"+month);
	}

第三代 java.time

 第三代:JDK1.8之后引入了新的时间的API
		(1)老版的日期时间对象没有设计为不可变对象每一个日期时间对象都应该用一个对象表示,不同的日期时间用不同的日期时间表示
		(2)老版的日期时间没有考虑闰秒
		(3)关于日期格式化等API只支持Date类型,而不支持Calendar

LocalDate:

只能表示日期   例如;生日,入职如期

LocalTime:

只能表示时间

LocalDateTime:

能表示如期和具体的时间
	@Test
	public void test4() {
	
		LocalDate today = LocalDate.now();
		System.out.println(today);
		
		LocalTime now =LocalTime.now();
		System.out.println(now);
		
		LocalDateTime tadaynow =LocalDateTime.now();
		System.out.println(tadaynow);
	}

方法:

(1)now()
获取当前的日期或者时间或日期和时间
(2)of()
of方法能够用来创建对象
	@Test
	public void test5() {
	
		//of方法能够用来创建对象
		LocalDate today = LocalDate.of(1998, 2, 7);
		System.out.println(today);
	
	}
(3)getxx()
获取你想获取的日期时间   如:年.月.日等
	@Test
	public void test6() {
	
		//get方法你想得到的年月日
		LocalDate birthday = LocalDate.of(1998, 2, 7);
		int year = birthday.getYear();
		
		LocalDate now = LocalDate.now();
		int t =now.getYear();
		System.out.println("你的年龄为"+(t-year));
	
	}
(4)withXx()
修改日期时间,但是时期时间是不可修改的,它要修改就一定要产生新的对象来接收它
@Test
	public void test7() {
		//with方法来改变时期时间
		LocalDate birthday = LocalDate.of(1998, 2, 7);
		LocalDate birthday2 = birthday.withYear(2020);
		//如果改变的是一年中的某一天的日期,那么月份有可能也会发生变化
		LocalDate birthday3 = birthday.withDayOfYear(20);
		System.out.println(birthday3);
		System.out.println(birthday);
		System.out.println(birthday2);
	
	}
(5)plus()
日期加
	@Test
	public void test8() {
	
		//plus()方法改变时期
		LocalDate today = LocalDate.now();
		LocalDate today2 =today.plusDays(1);
		System.out.println(today);
		System.out.println(today2);
	
	}
(6)minus()
 日期减
(7)isLeapYear()
是否是闰年

其他获取日期时间的方法:

Instant

  •  默认获取到的日期时间是子午辅助线的时间和日期
    
	@Test
   public void test9() {
   
   	//Instant方法获得日期时间
   	Instant i = Instant.now();//默认获取到的日期时间是子午辅助线的时间和日期
   	System.out.println(i);
   	LocalDateTime today = LocalDateTime.now();
   	System.out.println(today);
   	//它也可以获取到当前时区的日期和时间
   	OffsetDateTime Offset = i.atOffset(ZoneOffset.ofHours(8));
   	System.out.println(Offset);
   			
   }

练习

练习:

借助随机数,创建一个从2020.1.1 00:00:00 到 2020.12.31 23:59:59 之间的随机日期
import java.util.Date;
public class TestDate {
	public static void main(String[] args) {

		long second = 1000;
		long minute = second *60;
		long hour = minute * 60;
		long day = hour * 24;
		long year = day * 365;
		long year2020start = (2020-1970) * year;
		long leapday = (2020-1970)/4 * day;
		year2020start += leapday;
		long eighthour = hour * 8;
		year2020start -= eighthour;
		
	
		
		Date start = new Date(year2020start);
		System.out.println("这是2020年的第一天"+start);
		long year2020end = year2020start+year;
		Date end = new Date(year2020end);
		System.out.println("这是2020年的最后一天"+end);
		
		

		
		
		long randomTime = (long)(Math.random()*(year)+year2020start);
		Date randomDate = new Date(randomTime);
		System.out.println("2020年的随机一天"+randomDate);
		
		
		SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
		String begin = sf.format(start);
		String left = sf.format(end);
		String rand = sf.format(randomDate);
		System.out.println("这是2020年的第一天"+begin);
		System.out.println("这是2020年的最后一天"+left);
		System.out.println("这是2020年的随机一天:"+rand);
	}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炒冷饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值