哈喽,大家好,我是了不起。
LocalDateTime 是Java8中新加入的日期时间类,现在都 Java20 了,不会还有人没用过 LocalDateTime 吧?
今天给大家演示一下 LocalDateTime 的常用方法。
LocalDateTime、LocalDate、LocalTime 是 Java8 全新的日期框架,加强了对时间的管理,有很多特别好用的时间运算方法,而且是线程安全的,较之前的 util.Date 以及 Calander 使用起来更加的方便直观,下面介绍几种常见的日期对象用法。
@Test
public void test() {
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("localDate:"+localDate);//2023-02-22
System.out.println("localTime:"+localTime);//17:25:36.590
System.out.println("localDateTime:"+localDateTime);//2023-02-22T17:25:36.590
}输出结果:

可以看到不用做格式转换就可以得到可读性很高的日期格式。注意:ISO 8601规定的日期和时间分隔符是T。标准格式如下:
@Test
public void test() {
LocalDateTime localDateTime = LocalDateTime.now(); // 获取当前时间
int year = localDateTime.getYear(); // 获取年份 2023
int month = localDateTime.getMonthValue(); // 获取月份 2
int day = localDateTime.getDayOfMonth(); // 获取月中的天数 22
int hour = localDateTime.getHour(); // 获取当前的小时 17
int minute = localDateTime.getMinute(); // 获取当前分钟 33
int second = localDateTime.getSecond(); // 获取当前秒数 22
System.out.println(year);
System.out.println(month);
System.out.println(day);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
}输出结果:

在static目录中新建kaptcha.html页面,代码如下:
public void test() {
LocalDateTime of = LocalDateTime.of(2023,2,22,22,22,22);
System.out.println(of); // 输出2023-02-22T22:22:22
}@Test
public void test() {
// 将字符串转换为指定格式的时间(格式要和给定的格式一致,不然会报错)
LocalDateTime parse = LocalDateTime.parse("2023-02-22 22:22:22", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime parse1 = LocalDateTime.parse("2023 02 22 22:22:22", DateTimeFormatter.ofPattern("yyyy MM dd HH:mm:ss"));
LocalDateTime parse2 = LocalDateTime.parse("2023.02.22 22:22:22", DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"));
System.out.println(parse); // 输出2023-02-22T22:22:22
System.out.println(parse1); // 输出2023-02-22T22:22:22
System.out.println(parse2); // 输出2023-02-22T22:22:22
// 时间转字符串
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter of = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateTime = now.format(of);
System.out.println(dateTime); // 输出 2023-02-22 17:56:18
}输出结果:

LocalDateTime提供了对日期和时间进行加减的非常简单的链式调用,让时间运算变得非常简单:
@Test
public void test() {
LocalDateTime now = LocalDateTime.now(); // 当前时间2023-02-22T18:00:19.352
LocalDateTime plusYears= now.plusYears(2); // 在当前时间加上2年2025-02-22T18:00:19.352
LocalDateTime plusMnotallow= now.plusMonths(2);// 在当前时间商加上2月2023-04-22T18:00:19.352
LocalDateTime plusDays= now.plusDays(2); // 在当前时间加上2天2023-02-24T18:00:19.352
LocalDateTime plusHours= now.plusHours(2); // 在当前时间加上2个小时2023-02-22T20:00:19.352
LocalDateTime plusMinutes= now.plusMinutes(30); // 在当前时间加上30分钟2023-02-22T18:30:19.352
LocalDateTime plusSeconds = now.plusSeconds(30); // 在当前时间加上30秒2023-02-22T18:00:49.352
System.out.println(now);
System.out.println(plusYears);
System.out.println(plusMonths);
System.out.println(plusDays);
System.out.println(plusHours);
System.out.println(plusMinutes);
System.out.println(plusSeconds);
}输出结果:

@Test
public void test() {
LocalDateTime now = LocalDateTime.now(); // 当前时间
LocalDateTime minusYears = now.minusYears(2); // 在当前时间减上2年
LocalDateTime minusMonths = now.minusMonths(2);// 在当前时间商减上2月
LocalDateTime minusDays = now.minusDays(2); // 在当前时间减上2天
LocalDateTime minusHours = now.minusHours(2); // 在当前时间减上2个小时
LocalDateTime minusMinutes = now.minusMinutes(30); // 在当前时间减上30分钟
LocalDateTime minusSeconds = now.minusSeconds(30); // 在当前时间减上30秒
System.out.println("now:" + now);
System.out.println("minusYears:" + minusYears);
System.out.println("minusMonths:" + minusMonths);
System.out.println("minusDays:" + minusDays);
System.out.println("minusHours:" + minusHours);
System.out.println("minusMinutes:" + minusMinutes);
System.out.println("minusSeconds:" + minusSeconds);
}输出结果:

@Test
public void test() {
LocalDateTime now = LocalDateTime.now(); // 当前时间
LocalDateTime now1 = now.plusYears(5); // 在当前时间加上5年
// 给LocalDateTime 赋值
LocalDateTime of = LocalDateTime.of(2023,2,2,22,22,22);
LocalDateTime of1 = LocalDateTime.of(2023,8,5,1,1,1);
//两个时间作比较,第一个时间减去第二个时间(如果年份相同,比较月份,月份相同比较天数,以此类推)
int compareTo = now1.compareTo(now);
int compareTo1 = now.compareTo(now1);
int compareTo2 = now.compareTo(of);
int compareTo3 = now.compareTo(of1);
System.out.println(now); // 输出 2023-02-22T20:19:44.112v
System.out.println(now1); // 输出 2028-02-22T20:19:44.112
System.out.println(of); // 输出 2023-02-02T22:22:22
System.out.println(of1); // 输出 2023-08-05T01:01:01
System.out.println(compareTo); // 输出 5
System.out.println(compareTo1); // 输出 -5
System.out.println(compareTo2); // 输出 20
System.out.println(compareTo3); // 输出 -6
}输出结果:

注意没有计算相差的年和秒值,对于要计算相差的秒数,可以利用计算毫秒来进行转换
@Test
public void test() {
LocalDateTime now = LocalDateTime.now(); // 当前时间
// 给LocalDateTime 赋值
LocalDateTime of = LocalDateTime.of(2022,2,22,2,2,2);
Duration duration = Duration.between(of,now); // 后面减去前面
long toDays = Duration.between(of,now).toDays(); //相差的天数
long toHours = Duration.between(of,now).toHours();//相差的小时数
long toMinutes = Duration.between(of,now).toMinutes();//相差的分钟数
long toMillis = Duration.between(of,now).toMillis();//相差毫秒数
long toNanos = Duration.between(of,now).toNanos();//相差的纳秒数
System.out.println("toDays:"+ toDays); // 输出 toDays:365
System.out.println("toHours:"+ toHours); // 输出 toHours:8778
System.out.println("toMinutes:"+ toMinutes); // 输出 toMinutes:526732
System.out.println("toMillis:"+ toMillis); // 输出 toMillis:31603973840
System.out.println("toNanos:"+ toNanos); // 输出 toNanos:31603973840000000
}输出结果:

@Test
public void test() {
LocalDateTime now = LocalDateTime.now(); // 当前时间
LocalDateTime withYear = now.withYear(2060); // 改变当前年份(变成2060年)
LocalDateTime withMonth = now.withMonth(12); // 改变当前月份(变成12月份)
LocalDateTime withDayOfMonth = now.withDayOfMonth(28); //改变当前天数(变成28日)
LocalDateTime withHour = now.withHour(23); // 改变当前小时数(变成23时)
LocalDateTime withMinute = now.withMinute(30); // 改变当前分钟(变成30分钟)
LocalDateTime withSecond = now.withSecond(23); // 改变当前小时数(变成23时)
LocalDateTime withDayOfYear = now.withDayOfYear(60); // 从一月一号开始加上60天
System.out.println(now);
System.out.println("withYear:"+ withYear);
System.out.println("withMonth:"+ withMonth);
System.out.println("withDayOfMonth:"+ withDayOfMonth);
System.out.println("withHour:"+ withHour);
System.out.println("withMinute:"+ withMinute);
System.out.println("withSecond:"+ withSecond);
System.out.println("withDayOfYear:"+ withDayOfYear);
}输出结果:

@Test
public void test() {
// 自定义格式化:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss");
System.out.println("自定义格式yyyy/MM/dd HH:mm:ss :"+dtf.format(LocalDateTime.now()));
System.out.println("自定义格式yyyy.MM.dd HH:mm:ss :"+dtf1.format(LocalDateTime.now()));
// 用自定义格式解析:
LocalDateTime dt2 = LocalDateTime.parse("2020/10/20 15:16:17", dtf);
System.out.println("格式解析:"+dt2);
}输出结果:

@Test
public void test() {
// 本月第一天0:00时刻:
LocalDateTime firstDay = LocalDate.now().withDayOfMonth(1).atStartOfDay();
// 本月最后1天:
LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
// 下月第1天:
LocalDate nextMonthFirstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth());
// 本月第1个周一:
LocalDate firstWeekday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
}@Test
public void test() {
//判断两个时间点的前后
LocalDateTime now = LocalDateTime.now();
LocalDateTime target = LocalDateTime.of(2022, 2, 22, 22, 22, 22);
boolean isBefore = now.isBefore(target);
System.out.println("now:"+now);
System.out.println("target:"+target);
System.out.println("isBefore:"+isBefore);
System.out.println(LocalDate.now().isBefore(LocalDate.of(2022, 2, 22)));
System.out.println(LocalTime.now().isAfter(LocalTime.parse("08:15:00")));
}输出结果:

LocalDateTime获取时间以及计算都非常方便,而且是线程安全的,建议使用LocalDateTime。
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.
Java的Collections.unmodifiableList和Collections.unmodifiableMap在Ruby标准API中是否有等价物? 最佳答案 使用freeze应用程序接口(interface):Preventsfurthermodificationstoobj.ARuntimeErrorwillberaisedifmodificationisattempted.Thereisnowaytounfreezeafrozenobject.SeealsoObject#frozen?.Thismethodretur