Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 如何将LocalDate转换为ChronoZonedDateTime?_Java_Date_Datetime_Localdate_Datetime Conversion - Fatal编程技术网

Java 如何将LocalDate转换为ChronoZonedDateTime?

Java 如何将LocalDate转换为ChronoZonedDateTime?,java,date,datetime,localdate,datetime-conversion,Java,Date,Datetime,Localdate,Datetime Conversion,在下面的代码中,我的“如果”比较中出现了一个错误。消息中说“ChronoZonedDateTime中的isBefore(java.time.chrono.ChronoZonedDateTime)不能应用于(java.time.LocalDate)”。如何将LocalDate转换为ChronoZonedDateTime LocalDate taxBegin = tax.getBeginAt(); if(contract.getBeginAt().isBefore(taxBegin)){

在下面的代码中,我的“如果”比较中出现了一个错误。消息中说“
ChronoZonedDateTime中的isBefore(java.time.chrono.ChronoZonedDateTime)不能应用于(java.time.LocalDate)
”。如何将LocalDate转换为ChronoZonedDateTime

LocalDate taxBegin = tax.getBeginAt();

if(contract.getBeginAt().isBefore(taxBegin)){
    //do something
}
我尝试像
ChronoZonedDateTime.from(taxBegin)
那样包装,但没有成功,它给了我“
DateTimeException:无法从临时Accessor:2019-12-01获取java.time.LocalDat类型的ZoneId”


您可以使用
ZoneId.systemDefault()
ZoneOffset.UTC

文档说明:如果区域ID是一个区域偏移,则结果的时间始终为午夜。
所以你的代码将是

if (contract.getBeginAt().isBefore(convertLocalDate(taxBegin))) {
    //do something
}
如果要将其转换为特定时间,应使用
taxBegin.atTime(LocalTime).atZone(ZoneId)
您可以使用

您可以使用
ZoneId.systemDefault()
ZoneOffset.UTC

文档说明:如果区域ID是一个区域偏移,则结果的时间始终为午夜。
所以你的代码将是

if (contract.getBeginAt().isBefore(convertLocalDate(taxBegin))) {
    //do something
}
如果要将其转换为特定时间,应使用
taxBegin.atTime(LocalTime).atZone(ZoneId)
要将
ZonedDateTime
对象转换为
LocalDate
,可以使用
toLocalDate()
方法。因此,以下代码应该适用于您:

LocalDate taxBegin = tax.getBeginAt();

if(contract.getBeginAt().toLocalDate().isBefore(taxBegin)){
    //do something
}

检查在
ZonedDateTime
LocalDate
之间转换的示例要将
ZonedDateTime
对象转换为
LocalDate
,可以使用
toLocalDate()
方法。因此,以下代码应该适用于您:

LocalDate taxBegin = tax.getBeginAt();

if(contract.getBeginAt().toLocalDate().isBefore(taxBegin)){
    //do something
}

检查在
ZonedDateTime
LocalDate

之间转换的示例。如果您使用
LocalDateTime
而不是
LocalDate
,则可以正常工作。但是因为您有
LocalDate
,所以您浪费了时间。现在唯一的方法是将现有的
ChronoZonedDateTime
转换为
LocalDate
并进行比较。但是,如果时区不同,这可能并不总是有效

同一时区:

contract.getBeginAt().toLocalDate().isBefore(taxBegin)

如果您使用的是
LocalDateTime
,而不是
LocalDate
,它就可以正常工作了。但是因为您有
LocalDate
,所以您浪费了时间。现在唯一的方法是将现有的
ChronoZonedDateTime
转换为
LocalDate
并进行比较。但是,如果时区不同,这可能并不总是有效

同一时区:

contract.getBeginAt().toLocalDate().isBefore(taxBegin)

什么是
contract
变量,什么是
getBeginAt()
返回?尝试另一种方法
contract.getBeginAt().toLocalDate().isBefore(taxBegin)
Karol,contract.getBeginAt()返回ZonedDateTime值您的合同真的在一天中的特定时间开始吗?如果是这样的话,这是在特定的时区内指定的,还是作为Unix时间指定的?Sunil,我尝试了你所说的,并且成功了!非常感谢。如果您作为答案发布,我会将什么是
contract
变量以及什么是
getBeginAt()
返回标记为正确答案?请尝试另一种方法
contract.getBeginAt().toLocalDate().isBefore(taxBegin)
Karol,contract.getBeginAt()返回区域日期值您的合同真的是在一天中的特定时间开始的吗?如果是这样的话,这是在特定的时区内指定的,还是作为Unix时间指定的?Sunil,我尝试了你所说的,并且成功了!非常感谢。如果您作为答案发布,我将标记为正确的
ChronoZonedDateTime.toLocalDate()
为您提供“此日期时间的本地日期部分。此返回的本地日期与此日期时间具有相同的年、月和日。”(),这意味着它将位于纳税日期的时区内。可能与合同开始日期的时区完全无关,也可能与之无关。你不能只比较两个LocalDate,除非你知道它们应该在同一个时区。是的,你是对的。我知道。。。由于用户没有使用
LocalDateTime
,我觉得没有明确的方法进行比较。我们可以从
ChronoZonedDateTime
中获取
ZoneId
,但是我们无法在
LocalDate
中正确地进行比较。但是,你是对的,我应该把我的解释说得更清楚。
ChronoZonedDateTime.toLocalDate()
提供了“此日期时间的本地日期部分。它返回一个与此日期时间相同的年、月、日的本地日期。”(),这意味着它将在纳税日期的时区内。可能与合同开始日期的时区完全无关,也可能与之无关。你不能只比较两个LocalDate,除非你知道它们应该在同一个时区。是的,你是对的。我知道。。。由于用户没有使用
LocalDateTime
,我觉得没有明确的方法进行比较。我们可以从
ChronoZonedDateTime
中获取
ZoneId
,但是我们无法在
LocalDate
中正确地进行比较。但是,你是对的,我应该把我的解释解释得更清楚。同样的警告适用于Sunil的回答:仅仅因为你将ChronoZonedDateTime转换为LocalDate,并不意味着它与另一个LocalDate在同一时区是本地的。您还删除了时间部分,您不知道这对于这个特定的业务问题是否有效。税务对象可能特定于另一个字段中存在的特定国家或时区,该字段具有与区域税务规则关联的特定时间,即某物应在哪一天征税。OP的问题是要求之一,而不是将ZonedDateTime转换为LocalDate。Sunil的回答也有同样的警告:仅仅因为您将ChronoZonedDateTime转换为LocalDate,并不意味着它与另一个LocalDate在同一时区是本地的。您还删除了时间部分,您不知道这是否适用于此特定业务