processBuilder.start() 会立刻返回,不会待ps进程结束。所以Process提供waitFor方法,调用后线程阻塞,直到ps命令结束。
通过Period.between()
获取两个日期间相差的年数、月数、天数
对于整型数a,b来说,取模运算或者求余运算的方法都是:(即 内部算法都需要执行2步)
- 第1步:求 整数商: c = a/b
- 第2步:计算模或者余数: r = a - c * b
Java8中引入了两个与日期相关的新类
- Period - 计算两个“日期”间隔的类
- Duration - 计算两个“时间”间隔的类
Period 类与 Duration 类都是一段持续时间的概念,如果需要对比时间,它们就需要一个固定的时间值,所以就需要 LocalDate 类与 Instant 、LocalTime、LocalDateTime类来配合它们使用
TemporalAdjuster是时间调节器,可以执行复杂的日期操作,例如,可以获得下一个星期日的日期、当月的最后一天(再也不用计算当月是28,29还是30天了)、下一年的第一天、下一个工作日等等。
ZonedDateTime与LocalDateTime区别
- LocalDateTime:这基本上是一个美化的字符串表示日期和时间;它与时区无关,这意味着它不代表时间轴上的任何时间点
- Instant:这是自EPOCH以来经过的时间的毫秒表示,即 时间戳。这表示时间轴上的特定时刻(注意:时间戳跟时区没有关系!)
- ZonedDateTime:这也表示时间轴上的某个时刻,但它表示为带有时区的日期和时间
- java.util.Date是用于表示一个日期和时间的对象(注意与java.sql.Date区分,后者用在数据库中没有格式化的Date),它打印出的日期可读性差,可以使用SimpleDateFormat对时间进行格式化,但SimpleDateFormat又是线程不安全,包括format和parse方法,而在时间的计算方面不是很方便。
- java.util.Canlendar 可以用于获取并设置年、月、日、时、分、秒,它和Date比,主要多了一个可以做简单的日期和时间运算的功能,Canlendar 变量是全局变量,会导致脏变量情况产生,并且这个共享变量没有做线程安全控制,也就是多线程的情况下是线程不安全的。
- Java8出的新的时间日期API都是线程安全的比如LocalDate、LocalTime、LocalDateTime这三个类,计算功能强大,并且性能更好,代码更简洁。
Java8时间类型的好处:
- 明确了日期、时间概念;例如:瞬间(instant)、 长短(duration)、日期、时间、时区和周期;
- 继承了Joda 库按人类语言和计算机各自解析的时间处理方式;
- 新API基于ISO标准日历系统,java.time包下的所有类都是不可变类型而且线程安全;
Java中使用SimpleDateFormat类的构造函数SimpleDateFormat(String str)
构造格式化日期的格式,通过format(Date date)
方法将指定的日期(Date)对象格式化为指定格式的字符串。
Java中操作时间日期的类有:Date
(日期)、Calendar
(日历)、DateFormat
(日期格式)。