我的日期2015-12-25 23:59:59以纪元毫秒1451087999000的形式出现,而且我只想要日期部分即2015/12/25,如何有效地做到这一点可能与JODA时间有关库是现在处理java中日期时间的标准。
我有这个代码适用于大多数情况但是当时间如23:59:59它给了我下一个日期(在我的情况下它给2015-12-26输入2015-12-25 23 :59:59) -
String dateInMilliSeconds = "1451087999000";
String dateInYYYYMMDDFormat = DateHelper.convertDateFormat(new Date(Long.valueOf(dateInMilliSeconds)),DateHelper.yyyy_MM_dd);
DateHelper.convertDateFormat() -
public static final String yyyy_MM_dd = "yyyy-MM-dd";
public static String convertDateFormat( Date date, String outputFormat )
{
String returnDate = "";
if( null != date )
{
SimpleDateFormat formatter = new SimpleDateFormat(outputFormat);
returnDate = formatter.format(date);
}
return returnDate;
}
答案 0 :(得分:4)
您可以使用java 8中的localDate
LocalDate date = Instant.ofEpochMilli(dateInMilliSeconds).atZone(ZoneId.of(timeZone)).toLocalDate();
答案 1 :(得分:3)
我想提出两点:
Date
和SimpleDateFormat
。我的建议是:
String dateInMilliSeconds = "1451087999000";
LocalDate date = Instant.ofEpochMilli(Long.parseLong(dateInMilliSeconds))
.atOffset(ZoneOffset.UTC)
.toLocalDate();
System.out.println(date);
打印
2015-12-25
请注意,您可以免费获得所需的输出格式:LocalDate.toString()
生成它。如果您希望能够生成不同的输出格式,请使用a DateTimeFormatter
。
您的毫秒值不仅等于2015-12-25 23:59:59。它等于UTC 中的日期和时间,因此您需要确保转换使用此时区偏移量。当我从计算机上的问题运行您的代码时,我错误地得到2015-12-26
,因为我的计算机位于欧洲/哥本哈根时区。
java.time
Joda-Time是Java 1中原始日期和时间API的广泛认可的更好的替代品,许多人认为它很差并且很麻烦。 Joda-Time项目现在已经完成,因为现代Java日期和时间API称为JSR-310或java.time
三年半前出现,因此他们建议我们使用它。所以我的代码确实如此。
答案 2 :(得分:1)
时间戳1451087999000是2015-12-25 23:59:59(UTC)。在您的代码中,当您使用SimpleDateFormat
对其进行格式化时,您并未指定时区,因此请在当地时区进行格式化。
与Joda时间:
String dateInMilliSeconds = "1451087999000";
LocalDate date = new LocalDate(Long.parseLong(dateInMilliSeconds), DateTimeZone.UTC);
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
String result = formatter.print(date);