我有一个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();
}
我的问题:
EEE, dd MMM
格式,SimpleDateFormat
模式也采用此格式,因此结果为EEE, MMM dd
格式?java.util.Date
对象 - GMT ?LocalDateTime
? 答案 0 :(得分:5)
当您使用格式化程序将其格式化为Date.toString()
时,您依赖String
打印日期。您所看到的只是Date.toString()
的默认模式。你必须记住的是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);
}
此代码使用ZonedDateTime
来保留传入字符串的时区。
答案 1 :(得分:0)
您的计算机似乎设置为public ActionResult GetAllAbstracts(string categoryname)
{
List<Abstracts> abstracts = Helpers.SchedOrgHelpers.LoadAbstracts();
abstracts = abstracts.Where(x => x.Category == categoryname).ToList();
//Populate the Viewbag using the helpers method
ViewBag.abstracts = abstracts;
return View("....");
}
。要强制IST
输出,请导入GMT
并在java.util.TimeZone
块中执行此操作:
try