【问题标题】:Calculate days between two dates without using any date class计算两个日期之间的天数而不使用任何日期类
【发布时间】:2015-12-01 09:43:32
【问题描述】:

我正在尝试为我的 Java 课程介绍修改一个程序。用户以以下格式(19900506)输入他们的生日,然后显示此人的天数。该程序使用 GregorianCalendar 类来获取今天的日期并比较两者。闰年被考虑在内。我能够纠正程序,但我需要编写另一个版本来使用我自己的算法计算差异。我碰壁了,不知道该怎么做。我正在考虑将两个日期之间的差异转换为毫秒,然后再转换为天。但是有很多事情需要考虑,比如几个月中的几天,从今天开始的剩余天数等。任何帮助都将不胜感激。

这是我的代码:

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class DayssinceBirthV5 {

    public static void main(String[] args) {

        GregorianCalendar greg = new GregorianCalendar();
        int year = greg.get(Calendar.YEAR);
        int month = greg.get(Calendar.MONTH);
        int day = greg.get(Calendar.DAY_OF_MONTH);

        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter your birthday: AAAAMMDD): ");
        int birthday = keyboard.nextInt();//

        int testyear = birthday / 10000;// year
        int testmonth = (birthday / 100) % 100;// Month
        int testday = birthday % 100;// Day

        int counter = calculateLeapYears(year, testyear);

        GregorianCalendar userInputBd = new GregorianCalendar(testyear, testmonth - 1, testday);// Input

        long diffSec = (greg.getTimeInMillis() - userInputBd.getTimeInMillis());// Räkna ut diff

        // long diffSec = greg.get(Calendar.YEAR)-birthday;//calc Diff
        long total = diffSec / 1000 / 60 / 60 / 24;// calc dif in sec. Sec/min/hours/days
        total += counter;
        System.out.println("Today you are : " + total + " days old");

    }

    private static int calculateLeapYears(int year, int testyear) {
        int counter = 0;
        for (int i = testyear; i < year; i++) {
            if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
                counter++;
                System.out.println("Amount of leap years: " + counter);
            }
        }
        return counter;
    }

}

【问题讨论】:

  • 如果您使用的是 1990/05/06 等本地日期,则无需转换为毫秒,这必然涉及到时区。
  • @Satya 这可能是重复的,但我怀疑 OP 正在尝试在不使用 Jodatime 或其他库的情况下执行此操作 - 我假设这是一个练习。
  • @Andy Turner 彻底检查此链接。有人在不使用任何库的情况下回答了答案。
  • @Satya - 我的错误 - 也许值得链接到,例如stackoverflow.com/a/14278129/3788176,这是其中一个答案。

标签: java algorithm date variable-assignment


【解决方案1】:

你可以这样计算天数——

  1. 编写一个求一年中天数的方法:闰年有 366 天,非闰年有 365 天。
  2. 编写另一个方法来获取日期并找到一年中的哪一天 - 1 月 1 日是第 1 天,1 月 2 日是第 2 天,依此类推。您必须使用 1 中的函数。
  3. 计算以下内容:
    从出生日期到年底的天数。
    从年初到当前日期的天数。
    之间所有年份的天数。
  4. 总结以上所有内容。

【讨论】:

【解决方案2】:
def daysBetweenDates(self, date1: str, date2: str) -> int:
    y1, m1, d1 = map(int, date1.split('-'))
    y2, m2, d2 = map(int, date2.split('-'))


    m1 = (m1 + 9) % 12
    y1 = y1 - m1 // 10
    x1= 365*y1 + y1//4 - y1//100 + y1//400 + (m1*306 + 5)//10 + ( d1 - 1 )

    m2 = (m2 + 9) % 12
    y2 = y2 - m2 // 10
    x2= 365*y2 + y2//4 - y2//100 + y2//400 + (m2*306 + 5)//10 + ( d2 - 1 )

    return abs(x2 - x1)

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多