Java - 几个月和几天?

时间:2011-09-08 11:07:42

标签: java time

首先,我一直在寻找任何与我的问题相近但我找不到的东西。我不是一个非常优秀的程序员,我刚开始玩它一点,我对它的兴趣正在增长很多。

我在想是否可以使用基本且易于理解的语言制作一个基本程序,以及一个月和几天的“计算器”。

就像我有一个sysout打印文件说:Write month number,我会输入11,然后在月份写一个日期编号,有人写27它会说日期正确!

但是,如果它问我一个月,我会输入6June,然后我会在31中写下它会打印的日期Month 6 doesn't have day 31

我想保持简单,所以我理解基本语言不是太难!我只是一个新手!

感谢您的帮助。

5 个答案:

答案 0 :(得分:3)

如果你只想完成工作,我建议你去看看Calendar APIJodaTime

如果您对学习更感兴趣如何自己动手,这里有一个方法的建议:

这样的数组硬编码
int[] daysInMonths = { 31, 27, 31, ... };

然后使用以下行中的内容进行检查:

// Get month and day from user
Scanner s = new Scanner(System.in);
int month = s.nextInt();
int day = s.nextInt();

int monthIndex = month - 1;     // since array indices are 0-based

if (1 <= day && day <= daysInMonths[monthIndex])
    print ok
else
    print does not exist

答案 1 :(得分:1)

这个程序可以帮助你......

import java.util.*;

class Date {
    public static void main(String[] args) {
        int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        System.out.print("Enter a month number and a day number (separate using \';\':_");
        Scanner sc = new Scanner(System.in).useDelimiter(";");
        int month = sc.nextInt();
        int day = sc.nextInt();
        sc.close();
        System.out.println((day == days[month - 1]) ? "Date correct!" : "Date incorrect: Month " + month + " does not have day " + day);
    }
}

答案 2 :(得分:0)

在Date类中,1月的第一个月是“0”,ZERO。所以你认为六月和你写6,但必须是5;如

January 0
February 1
March 2
April 3
May 4
June 5

答案 3 :(得分:0)

利用Calendar类的功能是一种更好的方法。

    int day = 31;
    int month = 6; // JULY

    Calendar calendar = Calendar.getInstance();
    if(month < calendar.getActualMinimum(Calendar.MONTH) 
            || month > calendar.getActualMaximum(Calendar.MONTH))
        System.out.println("Error - invalid month");
    else 
    {
        calendar.set(Calendar.MONTH, month);
        if (day <  calendar.getActualMinimum(Calendar.DAY_OF_MONTH) 
                || day > calendar.getActualMaximum(Calendar.DAY_OF_MONTH))
        {
            System.out.println("Error - invalid day for month");
        }
        else
        {
            System.out.println("Date is correct");
        }
    }
}

您需要注意的是,当前日历 将1月视为0月。

答案 4 :(得分:0)

TL;博士

Month.of( 6 ).maxLength()

java.time

现代方法使用java.time类来取代麻烦的旧Date / Calendar类。

使用Month枚举。

Month month = Month.of( 6 ) ;  // Months numbered sanely, 1-12 for January-December.
if( dayOfMonthInput > month.maxLength() ) {
    … bad input
}

当然,2月份的最后一天取决于闰年。因此,如果您想要精确,则需要使用YearMonth

YearMonth ym = YearMonth.of( 2017 , 2 ) ;
if( dayOfMonthInput > ym.lengthOfMonth() ) {
    … bad input
}

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore