java - 将输入默认格式更改为 D 月,YYYY

标签 java date for-loop format date-formatting

0

我正在为我的学校作业创建一个 Date 类,它基本上执行一些基本功能,就像 API Date 一样。除设置为当前本地时间的构造函数之一外,不允许任何方法与 Java 的 API Date 类关联。然后我做了一个根据输入选项更改格式的方法。该代码工作得很好,但是格式方法的月份输出计算错误。也许我对数组的逻辑做错了,但不知道如何纠正。 例如:如果我输入 4/2/2019 并选择选项 B,那么它会打印“2019 年 12 月 2 日”而不是“4 月”

我尝试了 Month = 0 和 1 的循环,但没有成功。

import java.util.*;
public class Date
{
    // declare needed variables
   private int day;
   private int month;
   private int year;

   /**
    * Default constructor to set the date info to the current date 
    */
   public Date()
   {
       // I have trouble assign Date using the Java API Date class
       Date d1 = new Date();
       Calendar cal = Calendar.getInstance();
       cal.setTime(d1);
       day= cal.get(Calendar.DAY_OF_MONTH);
       month = cal.get(Calendar.MONTH);
       year = cal.get(Calendar.YEAR);
    }
    /**
    * Overloaded constructor to set the date info based on user input
    * @param int inMonth to input month value
    * @param int inDay to input day value
    * @param int inYear to input year value
    *
    */
    public Date( int inMonth, int inDay, int inYear)
    {
       //set all the inputs into suitable variables
       day = inDay;
       month = inMonth;
       year = inYear;
    }
    public String getDate(char format)
    {
        //String Array for option B

        String[] mArray = {"January","Febuary","March","April","May","June","July","August","September","October","November","December"};
        String dayString = new String();
        //Switch code with param input format option and return the String based on it
        switch(format)
        {
            case 'A':
                dayString = month+"/"+day+"/"+year;
            break;
            case 'B':
            for(month = 1;month<mArray.length;month++)
            {

                dayString = mArray[month]+" "+day+" "+year;
            }
            break;
        }
        return dayString;
    }
    /**
    * ToString method to return date info
    * @return String of Date
    */
     public String toString()
    {
        //Return value of Date in String
        return month+"/"+day+"/"+year;
    }
}

最佳答案

这是选项 B 的代码:

        for(month = 1;month<mArray.length;month++)
        {

            dayString = mArray[month]+" "+day+" "+year;
        }

这会迭代从 1 到 11 的月份。因此,第一次循环会分配 2019 年 2 月 2 日,下次该值将被 2019 年 3 月 2 日 覆盖,循环结束后,最后分配的值 2019 年 12 月 2 日 保留在那里。

使用循环是没有意义的。解决您的问题的基本方法是将其排除在外:

        dayString = mArray[month] + " " + day + " " + year;

假设您的月份编号为 1 月(1 月)到 12 月(12 月),您将无法获得完全正确的数组元素,但您很快就会发现,所以我将其留给您自己修复。无论如何,您需要一个明确的决定:一月在您的类(class)中表示为 0 还是 1?

关于java - 将输入默认格式更改为 D 月,YYYY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55468470/

相关文章:

java - 使用 Java 中的 BigDecimal(或其他类)获得更高的精度

sql-server - 获取多行的天数

javascript - 在 php 或 javascript 中查找开始日期和结束日期之间有一定天数差距的所有日期

java - 获取 ArrayList 的当前值 - Java

Matlab:如何动态更新for循环的限制?

java - 将MatOfInt转换为MatofPoint

java - 如何在 Java 中使用反射实例化内部类?

java - 在 Java 中格式化日期

python - 无法使用 Python for 循环列出文件

java - 终止或中断 java 8 流循环