我累了使用java.time.Period
,结果与我手动计算的结果相差三天。
这里奇怪的是当我将句号分成两个句点时,结果与我的手动计算相符。
第二种方法就像我手动计算周期一样。
我错过了什么吗?是否有日历算法的标准方法或算法?什么是java.time.Period
使用的算法?
import java.time.LocalDate;
import java.time.Period;
import java.time.temporal.ChronoUnit;
public class test2 {
public static void main(String[] args) {
LocalDate d1 = LocalDate.of(2014, 2, 14);
LocalDate d2 = LocalDate.of(2017, 8, 1);
Period p = Period.between(d1, d2);
//using period between the two dates directly
System.out.println("period between " + d1.toString() + " and " + d2.toString() + " is " + p.getYears()
+ " years " + p.getMonths() + " months " + p.getDays() + " Days");
//dividing the period into two parts
p = Period.between(LocalDate.of(2014, 3, 1), d2);
System.out
.println("period between " + d1.toString() + " and " + d2.toString() + " is " + p.getYears() + " years "
+ p.getMonths() + " months " + d1.until(LocalDate.of(2014, 3, 1), ChronoUnit.DAYS) + " Days");
}
}
答案 0 :(得分:1)
您可以在此处执行两项不同的操作:
Period p = Period.between(d1, d2)
为您提供了一种很好的格式化方法来输出这些日期之间的差异(您已正确使用了格式选项)。
d1.until(d2, ChronoUnit.DAYS)
会给你相同的 - 但不太合适(基本上它只给你LocalDates之间的天数)。
答案 1 :(得分:0)
答案(2014-02-14至2017-08-01期间为3年5个月18天)是您应该期待的:
2014-02-14
到2017-02-14
2017-02-14
到2017-07-14
2017-07-14
到2017-08-01
计算从几年到几个月到几天。这样,您就可以计算2014-02-14
和2016-02-29
之间的年数,月数和天数,分别为2年和15天。
如果您首先尝试计算天数,那么在确定2014-02-14
和2016-02-29
之间的年数,月数和天数时会遇到问题,因为没有一天2014-02-29
- 14天之后2014-02-14
2014-02-28
2014-02-14
,2014-03-01
number summary cleanSummary
0 1-123 he loves ice cream love ice cream
1 1-234 she loves ice love ice
2 1-345 i hate avocado hate avocado
3 1-123 i like skim milk like skim milk
后的number
。
答案 2 :(得分:0)
您无法像以往一样划分日期差,因为期间计算取决于相关日期的月/年。在您的示例中,
2月14日和 2014年3月1日之间的时间段仅为 15天,
天在 2月14日和 2017年8月1日之间的时间段是从 2017年7月14日到< strong> 2017年8月1日,将为 18天,详细信息:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
def expand_shadow_root(element):
shadow_root = driver.execute_script("return arguments[0].shadowRoot", element)
return shadow_root
root1 = driver.find_element_by_tag_name("print-preview-button-strip")
shadow_root1 = expand_shadow_root(root1)
btn = shadow_root1.find_element_by_xpath("/html/body/print-preview-app//print-preview-sidebar//print-
preview-button-strip//cr-button[1]")
wait.until((EC.element_to_be_clickable(By.XPATH,"/html/body/print-preview-app//print-preview-
sidebar//print-preview-button-strip//cr-button[1]")))
btn.click()
这意味着用 2014年3月代替 2017年8月来独立于整个日期计算天差会导致答案不正确( 15 应该是 18天)。
因此,如果您要进行任何手动计算而不仅仅是其1) 14/02/2014 -> 14/02/2017: 3 years
2) 14/02/2017 -> 14/07/2017: 5 months
3) 14/07/2017 -> 01/08/2017: 18 days
部分,或者只是简单安全地使用{{1},则可能需要考虑整个日期。 }给予Inspect Element print的类来执行所需的日期计算。