输入和输出日期类Java

时间:2015-03-28 17:10:53

标签: java arrays date

我正在做一个类日期项目,用户输入日期并将日期输出为3种差异格式。 a)MM / DD / YYYY b)MonthName DD,YYYY c)DDD,YYYY(一年中的日期)。

我陷入了困境,输出了a部分的结果。这是我到目前为止所得到的

import java.util.Scanner;
public class Implementation
{
    private static int month;
    private static int day;
    private static int year;
    private static final int[] daysPerMonth = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    public static void Date(String args[])
    {
        Scanner input = new Scanner(System.in);
        while(year != -1)
        {    
        System.out.print("Enter month: ");
        month = input.nextInt();
        System.out.print("Enter day: ");
        day = input.nextInt();
        System.out.print("Enter year: ");
        year = input.nextInt();

        System.out.printf("\nMM/DD/YYYY: %d/%d/%d");
        System.out.printf("\nMonth DD/YYYY: ");
        System.out.println("\nDDD YYYY: \n");
        }    
    }    
    public Implementation(int month, int day, int year)
        {
        if (month <= 0 || month > 12)
            throw new IllegalArgumentException(
            "month (" + month + ") must be 1-12");
        if (day <= 0 | (day > daysPerMonth[month] && !(month == 2 && day == 29)))
            throw new IllegalArgumentException
            ("day (" + day + ") out-of-range for the specified month and year");
        if (month == 2 && day == 29 && !(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)))
            throw new IllegalArgumentException
            ("day (" + day + ") out-of-range for the specified month and year");

        this.month = month;
        this.day = day;
        this.year = year;
        }
    public String toString()
    {
        return String.format("%d/%d/%d", month, day, year);
    }
}

我应该在System.out.printf("\nMM/DD/YYYY: %d/%d/%d");之后立即显示结果(有效的月,日和年)。我还没有完成其他两个选项。我是初学者,在这个项目中非常沮丧。有人请帮忙吗?

3 个答案:

答案 0 :(得分:0)

可能你忘了使用SimpleDateFormat。您正在使用String.format。格式化日期时最好避免。你可以尝试这个 -

SimpleDateFormat formatter = new SimpleDateFormat("mm/dd/yyyy"); //for (a)
Date dateString = formatter.parse(strDate);   

由于

答案 1 :(得分:0)

尝试类似:

Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, 2014);
c.set(Calendar.MONTH, 10);
c.set(Calendar.DAY_OF_MONTH, 21);
DateFormat format = new SimpleDateFormat("dd-MM-yyyy");
System.out.println(format.format(c.getTime()));
Output:
21-10-2014

答案 2 :(得分:0)

如果您想使用printf输出一些文本,如下图所示,您需要告诉方法您实际想要打印的内容。

对于这一行:

System.out.printf("\nMM/DD/YYYY: %d/%d/%d");

您需要将月,日和年的变量放入printf方法中,否则该方法只会打印双引号内的内容。

所以在这里做正确的方法是:

System.out.printf("\nMM/DD/YYYY: %d/%d/%d", month, day, year);

Java将在参数中的逗号后用变量内的值替换%d符号并打印出文本。第一个%d替换为第一个变量(在本例中为#34; month&#34;),第二个%d由第二个变量(&#34; day&#34;)替换,依此类推。 (当变量是int时使用%d,当它是浮点数时使用%f)

Documentation on Java String formatting