java学习日记20230409-日期类
日期类
第一代日期类
public class Date01 {
public static void main(String[] args) {
//默认输出国外的方式,通常需要转化
Date date = new Date();
System.out.println(date);
Date date1 = new Date(1232131321);
System.out.println(date1);
//转化
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
simpleDateFormat.format(date);
System.out.println(simpleDateFormat.format(date));
//可以把格式化的String转化为对应Date
String s= "1996-08-21 10:20:30";
try {
Date parse = simpleDateFormat.parse(s);
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(simpleDateFormat1.format(parse));
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
2.第二代工具类
- 第二代日期类,主要就是Calendar类,该类是一个抽象类,他为特定瞬间与一组诸如YEAR,MONTH,DAY_OF_MONTH,HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(获得下星期的日期)提供了一些方法
-
public class Calendar01 { public static void main(String[] args) { //Calendar是一个抽象类,并且构造器非公共的 //通过getInstance获取实例 Calendar calendar = Calendar.getInstance(); System.out.println(calendar); //Calendar返回月时是按照0开始编号 //Calendar需要程序员自己组合日期 System.out.println(calendar.get(Calendar.YEAR)); //24进制 System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); } }
3.第三代日期类:
前两代日期类的不足分析
jdk1.0包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后就被弃用了,而Calendar也存在问题:
- 可变性:像日期和时间这样的类应该是不可变的;
- 偏移性:Date中的年份是从1900开始的,而月份都是从0开始的
- 格式化:格式化只对Date有用,Calendar则不行
- 此外,他们也不是线程安全的,不能处理闰秒(每隔两天多出1s)
- jdk8第三代日期类:
- LcalDate:年月日
- LocalTime:时分秒
- LocalDateTime:年月日 时分秒
-
public class LocalDate01 { public static void main(String[] args) { //第三代日期类 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDateTime); System.out.println(localDateTime.getYear()); System.out.println(localDateTime.getMonth()); System.out.println(localDateTime.getMonthValue()); System.out.println(localDateTime.getHour()); System.out.println(localDateTime.getMinute()); System.out.println(localDateTime.getSecond()); //DateTimeFormatter格式化 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String date = dateTimeFormatter.format(localDateTime); System.out.println(date); //Instant时间戳 //类似Date提供了一系列和Date类转换的方式 //Instant-Date:Date.from(instant); //Date-Instant:date.toINstant(); Instant instant = Instant.now(); System.out.println(instant); Date date1 = Date.from(instant); Instant instant1 = date1.toInstant(); System.out.println(instant1); System.out.println(SimpleDateFormat.getDateTimeInstance().format(date1)); //plus和minus方法 System.out.println(dateTimeFormatter.format(localDateTime.plusDays(890))); System.out.println(dateTimeFormatter.format(localDateTime.minusDays(890))); Duration duration = Duration.between(localDateTime.plusDays(890),localDateTime.minusDays(890)); long days = duration.toDays(); //相差的天数 long hours = duration.toHours();//相差的小时数 long minutes = duration.toMinutes();//相差的分钟数 System.out.println("相差:"+days+"天:"+hours+" 小时:"+minutes+" 分钟"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南