Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何仅从大纪元时间23:59:59获取日期_Java_Datetime_Jodatime - Fatal编程技术网

Java 如何仅从大纪元时间23:59:59获取日期

Java 如何仅从大纪元时间23:59:59获取日期,java,datetime,jodatime,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"; Strin

我有日期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-

您可以使用Java8

LocalDate date = Instant.ofEpochMilli(dateInMilliSeconds).atZone(ZoneId.of(timeZone)).toLocalDate();
您可以使用Java8

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

时间戳1451087999000是UTC的2015-12-25 23:59:59。在您的代码中,当您使用SimpleDataFormat格式化它时,您没有指定时区,因此它是在您的本地时区中格式化的

乔达时间:

String dateInMilliSeconds = "1451087999000";

LocalDate date = new LocalDate(Long.parseLong(dateInMilliSeconds), DateTimeZone.UTC);

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");

String result = formatter.print(date);

时间戳1451087999000是UTC的2015-12-25 23:59:59。在您的代码中,当您使用SimpleDataFormat格式化它时,您没有指定时区,因此它是在您的本地时区中格式化的

乔达时间:

String dateInMilliSeconds = "1451087999000";

LocalDate date = new LocalDate(Long.parseLong(dateInMilliSeconds), DateTimeZone.UTC);

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");

String result = formatter.print(date);

我想提出两点:

时区至关重要。 跳过过期的类日期和SimpleDataFormat。 我的建议是:

    String dateInMilliSeconds = "1451087999000";
    LocalDate date = Instant.ofEpochMilli(Long.parseLong(dateInMilliSeconds))
            .atOffset(ZoneOffset.UTC)
            .toLocalDate();
    System.out.println(date);
这张照片

2015-12-25
请注意,您可以免费获得所需的输出格式:LocalDate.toString生成它。如果希望能够生成不同的输出格式,请使用

时区 你的毫秒值不仅仅等于2015-12-25 23:59:59。它等于UTC中的此日期和时间,因此您需要确保转换使用此时区偏移。当我在我的计算机上运行问题代码时,我错误地得到了2015-12-26,因为我的计算机位于欧洲/哥本哈根时区

JSR-310又名java.time
Joda Time被广泛认为是Java1中原始日期和时间API的更好的替代品,许多人认为它很差,也很麻烦。Joda Time项目现在已经完成,因为称为JSR-310或Java.Time的现代Java日期和时间API是三年半前推出的,所以他们建议我们改用它。我的代码就是这样。

我想指出两点:

时区至关重要。 跳过过期的类日期和SimpleDataFormat。 我的建议是:

    String dateInMilliSeconds = "1451087999000";
    LocalDate date = Instant.ofEpochMilli(Long.parseLong(dateInMilliSeconds))
            .atOffset(ZoneOffset.UTC)
            .toLocalDate();
    System.out.println(date);
这张照片

2015-12-25
请注意,您可以免费获得所需的输出格式:LocalDate.toString生成它。如果希望能够生成不同的输出格式,请使用

时区 你的毫秒值不仅仅等于2015-12-25 23:59:59。它等于UTC中的此日期和时间,因此您需要确保转换使用此时区偏移。当我在我的计算机上运行问题代码时,我错误地得到了2015-12-26,因为我的计算机位于欧洲/哥本哈根时区

JSR-310又名java.time
Joda Time被广泛认为是Java1中原始日期和时间API的更好的替代品,许多人认为它很差,也很麻烦。Joda Time项目现在已经完成,因为称为JSR-310或Java.Time的现代Java日期和时间API是三年半前推出的,所以他们建议我们改用它。我的代码也是这样。

我已经很久没有使用Java了,但这听起来像是一个典型的时区偏移问题。例如:历元定义为UTC,而您在服务器的本地时区中显示输出时间。或者类似的东西。从时间戳,您可以构建一个java.util.Date。此时,您可以将其转换为LocalDate,但必须将时区指定为2015-12-25 23:59:59,也可以在另一个时区中指定为2015-12-26 00:59:59。请使用Long.parseLong而不是Long.valueOf。而且,乔达的时代很古老;在java 8或9中使用java.time包中的类。我无法帮助您使用Jodatime,只想指出的是,即使在Jodatime主页上,它也指出,从java SE 8开始,用户被要求迁移到java.time JSR-310—JDK的核心部分,它取代了这个项目。。如果您对java.time还满意,我可以提供一个解决方案,不过无论如何,已经有一个解决方案:它将为您提供大部分解决方案。我已经很久没有使用java了,但这听起来像是一个典型的时区偏移问题。例如:历元定义为UTC,而您在服务器的本地时区中显示输出时间。或者类似的东西。从时间戳,您可以构建一个java.util.Date。此时,您可以将其转换为LocalDate,但必须将时区指定为2015-12-25 23:59:59,也可以在另一个时区中指定为2015-12-26 00:59:59。请使用Long.parseLong而不是Long.valueOf。而且,乔达的时代很古老;在java 8或9中使用java.time包中的类。我无法帮助您使用Jodatime,只想指出的是,即使在Jodatime主页上,它也指出,从java SE 8开始,用户被要求迁移到java.time JSR-310—JDK的核心部分,它取代了这个项目。。如果您对java.time没有意见,我可以提供一个解决方案,但是已经有了:
我想我们可以直接使用date.toString方法而不是DateTimeFormatter来获取输出,因为我确信日期已经用yyyy-MM-dd格式了,对吗?顺便说一句,这解决了我的问题。是的,@thedevd,我读的方式,你是对的,可以。我想我们可以直接使用date.toString方法而不是DateTimeFormatter来获得输出,因为我确信日期已经用yyyy-MM-dd格式了,对吗?顺便说一下,这解决了我的问题。是的,@thedevd,我读到的方式,你是正确的,你可以。这也很有效。最好使用传递的时区,而不是使用系统默认值,比如-String timezone=Etc/Greenwich,然后使用.atZoneZoneId.oftimeZone。我赞成使用Java 8或Java 6和7的Three-Ten Backport,代码是一样的。在我的计算机上运行您的代码行,我得到2015-12-26,即所需日期的第二天。这是因为您的代码使用我的JVM的时区,即欧洲/哥本哈根。最好使用UTC。谢谢@OleV.V。添加了区域。这也起作用。最好使用传递的时区,而不是使用系统默认值,比如-String timezone=Etc/Greenwich,然后使用.atZoneZoneId.oftimeZone。我赞成使用Java 8或Java 6和7的Three-Ten Backport,代码是一样的。在我的计算机上运行您的代码行,我得到2015-12-26,即所需日期的第二天。这是因为您的代码使用我的JVM的时区,即欧洲/哥本哈根。最好使用UTC。谢谢@OleV.V。增加了时区。我同意在这种情况下时区的重要性。我同意在这种情况下时区的重要性。