【问题标题】:Input and Output date class Java输入和输出日期类 Java
【发布时间】:2015-03-28 17:10:52
【问题描述】:

我正在做一个课程日期项目,用户输入日期并将日期输出为 3 种不同的格式。 a) 月/日/年 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"); 后面加上什么来显示结果(有效的月、日和年)。我还没有完成其他两个选项。我是初学者,对这个项目非常沮丧。有人帮忙吗?

【问题讨论】:

    标签: java arrays date


    【解决方案1】:

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

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

    谢谢

    【讨论】:

    • SimpleDateFormat 实际上做了什么?这不是当前日期时间的东西吗?我是新人,你能解释清楚吗?
    • 直接来自 java doc - “SimpleDateFormat 是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。它允许格式化(日期 -> 文本),解析(文本 -> 日期) , 和归一化”。您可以在此处查看更多信息 - docs.oracle.com/javase/7/docs/api/java/text/…
    【解决方案2】:

    尝试类似:

    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
    

    【讨论】:

    • 我不太明白。我认为这种方式是硬编码,这不是我真正想要的。谢谢
    • 您有来自用户的月、日、年,因此请使用这些变量而不是 10,21,2014。
    【解决方案3】:

    当你想使用 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 被第一个变量(在本例中为“月”)替换,第二个 %d 被第二个变量(“日”)替换,依此类推。 (当变量是 int 时使用 %d,当变量是 float 时使用 %f,等等)

    Documentation on Java String formatting

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2016-10-29
      • 2022-06-16
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多