Mik*_* B. 2 java datetime date date-comparison java-8
我有一个Strings日期的数组,例如:
现在我想在此列表中找到最近的日期.为了做到这一点,我尝试将这些字符串反序列化为java.util.Date对象,然后比较它们.
java.util.Date对象生成的代码示例:
strDate = "Tue, 09 Feb 2016 14:07:00 GMT";
DateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
Date date;
try {
date = format.parse(strDate);
//Result: Tue Feb 09 16:07:00 IST 2016
System.out.println("Result: " + date.toString());
} catch(ParseException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
EEE, dd MMM格式化的,SimpleDateFormat模式也是这种格式,因此,结果是EEE, MMM dd格式化的原因?java.util.Date在我的情况下,如何在与初始字符串相同的时区中获取对象 - GMT?LocalDateTime?Date.toString()当您将格式化String为格式化程序时,您依赖于打印日期.你所看到的只是默认模式Date.toString().你必须记住的是a Date没有时区.您正在使用IST时区查看输出,这必须是因为JVM的当前区域设置设置为时区名称所针对的某个特定区域设置"IST".
关于第4点,是的,您可以使用Java 8中引入的Java Time API更清晰.您可以创建一个List字符串来解析,创建一个DateTimeFormatter解析它,并保持最大日期值.
public static void main(String[] args) {
List<String> dates = Arrays.asList("Tue, 09 Feb 2016 14:07:00 GMT", "Tue, 09 Feb 2016 19:55:00 GMT");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);
ZonedDateTime maxDate = dates.stream()
.map(s -> ZonedDateTime.parse(s, formatter))
.max(ZonedDateTime::compareTo)
.get(); // or .orElse(null)
System.out.println(maxDate);
}
Run Code Online (Sandbox Code Playgroud)
此代码使用a ZonedDateTime来保留传入字符串的时区.
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |