如何从时间为23:59:59的时间段获取日期

时间:2017-09-19 09:44:22

标签: java datetime jodatime

我的日期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;
}

3 个答案:

答案 0 :(得分:4)

您可以使用java 8中的localDate

LocalDate date = Instant.ofEpochMilli(dateInMilliSeconds).atZone(ZoneId.of(timeZone)).toLocalDate();

答案 1 :(得分:3)

我想提出两点:

  1. 时区至关重要。
  2. 跳过过时的课程DateSimpleDateFormat
  3. 我的建议是:

        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,因为我的计算机位于欧洲/哥本哈根时区。

    JSR-310 AKA 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);