示例代码:
import java.util.Calendar; import java.util.GregorianCalendar; public class CalendarClassTest { public static void main(String[] args) { Calendar gc = Calendar.getInstance(); System.out.println(gc.getClass().getName()); //Calendar.getInstance();返回的是GregorianCalendar对象 // Calendar.getInstance()和GregorianCalendar()效果一样的 GregorianCalendar gc2 = new GregorianCalendar(); System.out.println(gc2.getClass().getName()); } }示例代码
import java.util.Calendar; public class CalendarTest { Calendar calendar = Calendar.getInstance(); public void test1() { // 获取年 int year = calendar.get(Calendar.YEAR); // 获取月,这里需要需要月份的范围为0~11,因此获取月份的时候需要+1才是当前月份值 int month = calendar.get(Calendar.MONTH) + 1; // 获取日 int day = calendar.get(Calendar.DAY_OF_MONTH); // 获取时 int hour = calendar.get(Calendar.HOUR); // int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24小时表示 // 获取分 int minute = calendar.get(Calendar.MINUTE); // 获取秒 int second = calendar.get(Calendar.SECOND); // 星期,英语国家星期从星期日开始计算 int weekday = calendar.get(Calendar.DAY_OF_WEEK); System.out.println("现在是" + year + "年" + month + "月" + day + "日" + hour + "时" + minute + "分" + second + "秒" + "星期" + weekday); } // 一年后的今天 public void test2() { // 同理换成下个月的今天calendar.add(Calendar.MONTH, 1); calendar.add(Calendar.YEAR, 1); // 获取年 int year = calendar.get(Calendar.YEAR); // 获取月 int month = calendar.get(Calendar.MONTH) + 1; // 获取日 int day = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("一年后的今天:" + year + "年" + month + "月" + day + "日"); } // 获取任意一个月的最后一天 public void test3() { // 假设求6月的最后一天 int currentMonth = 6; // 先求出7月份的第一天,实际中这里6为外部传递进来的currentMonth变量 // 1 calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1); calendar.add(Calendar.DATE, -1); // 获取日 int day = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("6月份的最后一天为" + day + "号"); } // 设置日期 public void test4() { calendar.set(Calendar.YEAR, 2000); System.out.println("现在是" + calendar.get(Calendar.YEAR) + "年"); calendar.set(2020, 7, 8); // 获取年 int year = calendar.get(Calendar.YEAR); // 获取月 int month = calendar.get(Calendar.MONTH)+1; // 获取日 int day = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("现在是" + year + "年" + month + "月" + day + "日"); } //add和roll的区别 public void test5() { calendar.set(2020, 7, 8); // add方法带进位减法 calendar.add(Calendar.DAY_OF_MONTH, -8); // 获取年 int year = calendar.get(Calendar.YEAR); // 获取月 int month = calendar.get(Calendar.MONTH)+1; // 获取日 int day = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("2020.8.8, 用add减少8天,现在是" + year + "." + month + "." + day); calendar.set(2020, 7, 8); // roll方法做加减法,只影响当前字段,不影响进位。 // 如下只将天数减去8天,但不影响月份,月份不减 calendar.roll(Calendar.DAY_OF_MONTH, -8); // 获取年 year = calendar.get(Calendar.YEAR); // 获取月 month = calendar.get(Calendar.MONTH)+1; // 获取日 day = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("2020.8.8, 用roll减少8天,现在是" + year + "." + month + "." + day); } public static void main(String[] args) { CalendarTest c = new CalendarTest(); c.test1(); System.out.println("============"); c.test2(); System.out.println("============"); c.test3(); System.out.println("============"); c.test4(); System.out.println("============"); c.test5(); } }LocalDate类使用方法示例代码
import java.time.LocalDate; import java.time.Month; import java.time.ZoneId; public class LocalDateExample { public static void main(String[] args) { //当前时间 LocalDate today = LocalDate.now(); System.out.println("Current Date="+today); //根据指定时间创建LocalDate LocalDate firstDay_2014 = LocalDate.of(2014, Month.JANUARY, 1); System.out.println("Specific Date="+firstDay_2014); //给定错误时间参数,将报异常java.time.DateTimeException //LocalDate feb29_2014 = LocalDate.of(2014, Month.FEBRUARY, 29); //可以更改时区 LocalDate todayBeijing = LocalDate.now(ZoneId.of("Asia/Shanghai")); System.out.println("Current Date in Shanghai="+todayBeijing); //从纪元日01/01/1970开始365天 LocalDate dateFromBase = LocalDate.ofEpochDay(365); System.out.println("365th day from base date= "+dateFromBase); //2020年的第100天 LocalDate hundredDay2020 = LocalDate.ofYearDay(2020, 100); System.out.println("100th day of 2020="+hundredDay2020); } }LocalTime类使用方法示例代码
import java.time.LocalTime; import java.time.ZoneId; public class LocalTimeExample { public static void main(String[] args) { //当前时间 时分秒 纳秒 LocalTime time = LocalTime.now(); System.out.println("Current Time="+time); //根据时分秒 LocalTime specificTime = LocalTime.of(12,20,25,40); System.out.println("Specific Time of Day="+specificTime); //错误的时间参数 将报DateTimeException //LocalTime invalidTime = LocalTime.of(25,20); //上海时间 LocalTime timeSH = LocalTime.now(ZoneId.of("Asia/Shanghai")); System.out.println("Current Time in SH="+timeSH); //一天当中第几秒 LocalTime specificSecondTime = LocalTime.ofSecondOfDay(10000); System.out.println("10000th second time= "+specificSecondTime); } }LocalDateTime类使用方法示例:
import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.Month; import java.time.ZoneId; import java.time.ZoneOffset; public class LocalDateTimeExample { public static void main(String[] args) { //当前日期 时分秒 LocalDateTime today = LocalDateTime.now(); System.out.println("Current DateTime="+today); //根据日期, 时分秒来创建对象 today = LocalDateTime.of(LocalDate.now(), LocalTime.now()); System.out.println("Current DateTime="+today); //指定具体时间来创建对象 LocalDateTime specificDate = LocalDateTime.of(2014, Month.JANUARY, 1, 10, 10, 30); System.out.println("Specific Date="+specificDate); //如时间不对,将报异常DateTimeException //LocalDateTime feb29_2014 = LocalDateTime.of(2014, Month.FEBRUARY, 28, 25,1,1); //上海时区 LocalDateTime todayShanghai = LocalDateTime.now(ZoneId.of("Asia/Shanghai")); System.out.println("Current Date in Shanghai="+todayShanghai); //从01/01/1970 10000秒 LocalDateTime dateFromBase = LocalDateTime.ofEpochSecond(10000, 0, ZoneOffset.UTC); System.out.println("10000th second time from 01/01/1970= "+dateFromBase); } }Instant类使用示例: 用来设定一个时间戳返回一个Date 对象 可以根据Instant返回到java.util.Date,然后可以和Calendar这个类进行互通。也就是说java 8里面time的时间(LocalDate、LocalTime、LocalDateTime)可以通过时间戳和以前的Calendar类等等进行交换。
import java.time.Duration; import java.time.Instant; import java.util.Date; public class InstantExample { public static void main(String[] args) { //当前时间戳 Instant timestamp = Instant.now(); System.out.println("Current Timestamp = "+timestamp); //从毫秒数来创建时间戳 Instant specificTime = Instant.ofEpochMilli(timestamp.toEpochMilli()); System.out.println("Specific Time = "+specificTime); Date date = Date.from(timestamp); System.out.println("current date = " + date); } }综合前面知识示例:
import java.time.LocalDate; import java.time.LocalTime; import java.time.Period; import java.time.temporal.TemporalAdjusters; public class DateUtil { public static void main(String[] args) { LocalDate today = LocalDate.now(); //判断是否是闰年 System.out.println("Year "+today.getYear()+" is Leap Year "+today.isLeapYear()); //今天和01/01/2015比较 System.out.println("Today is before 01/01/2015 "+today.isBefore(LocalDate.of(2015,1,1))); //当前时分秒 System.out.println("Current Time="+today.atTime(LocalTime.now())); //加减时间 //增加10天 System.out.println("10 days after today will be "+today.plusDays(10)); //增加3周 System.out.println("3 weeks after today will be "+today.plusWeeks(3)); //增加20个月 System.out.println("20 months after today will be "+today.plusMonths(20)); System.out.println("10 days before today will be "+today.minusDays(10)); System.out.println("3 weeks before today will be "+today.minusWeeks(3)); System.out.println("20 months before today will be "+today.minusMonths(20)); //调整时间 System.out.println("First date of this month= "+today.with(TemporalAdjusters.firstDayOfMonth())); LocalDate lastDayOfYear = today.with(TemporalAdjusters.lastDayOfYear()); System.out.println("Last date of this year= "+lastDayOfYear); //时间段计算 //计算今天到年底的时间 Period period = today.until(lastDayOfYear); System.out.println("Period Format= "+period); System.out.println("Months remaining in the year= "+period.getMonths()); } }注:当前很多程序还是使用Calendar类处理时间,所以要中的掌握Calendar类的用法