输入日期(MM / dd / yyyy)到字符串

时间:2018-07-23 06:52:49

标签: java

您好,我是使用Java的新手 我只需要一些建议即可。

这是我需要做的: 用户输入日期8/15/2018,控制台应显示:“你好!这是我们的Lord 2018年八月的第15天。”

这是我的代码

    package newdate;
    import java.util.Scanner;
    public class NewDate {


public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

    System.out.print("Enter the date in mm/dd/yyyy: ");
    String str=sc.next();

    switch (str) {
        case 1:  str.substring(0,2) = "January";
                 break;
        case 2:  str.substring(0,2) = "February";
                 break;
        case 3:  str.substring(0,2) = "March";
                 break;
        case 4:  str.substring(0,2) = "April";
                 break;
        case 5:  str.substring(0,2) = "May";
                 break;
        case 6:  str.substring(0,2) = "June";
                 break;
        case 7:  str.substring(0,2) = "July";
                 break;
        case 8:  str.substring(0,2) = "August";
                 break;
        case 9:  str.substring(0,2) = "September";
                 break;
        case 10: str.substring(0,2) = "October";
                 break;
        case 11: str.substring(0,2) = "November";
                 break;
        case 12: str.substring(0,2) = "December";
                 break;
        default: str.substring(0,2) = "Invalid month";
                 break;

    }
    System.out.println("Hello! This is day " + str.substring(3,5) +" of the month of " + str.substring(0,2) +" in the year of our Lord" + str.substring(6,10));

}

    }

问题是数据类型,我希望将数字替换为字符串(月) 例如:11 = 11月

我该怎么办?

3 个答案:

答案 0 :(得分:2)

首先,对于现实世界的编程,将使用标准库中的LocalDate来保存日期,并使用DateTimeFormatter来解析用户在LocalDate中输入的日期。请参阅底部的链接。

从根本上讲,对于您的代码,您需要一个单独的String变量来表示月份名称。您不能将其分配回已有的字符串中。只需声明String monthName;,然后在您的switch开头为其分配适当的值即可。

另外,当str是字符串并且1是int时,您将无法打开str并将1用作大小写标签。简单的解决方法是打开str.substring(0,2)(月份数字作为字符串),并使用"01""02"等作为大小写标签。另一个常见的解决方案是将月份号解析为int(请参见下面的另一个链接或搜索操作方法),然后按原样保留案例标签1、2等。

链接

答案 1 :(得分:1)

您好,亲爱的初级开发人员:) 我的建议是: 首先为月份名称定义一个枚举:

 enum MonthName{
    January(0),
    February(1),
    March(2),
    April(3),
    May(4),
    June(5),
    July(6),
    August(7),
    September(8),
    October(9),
    November(10),
    December(11);

    private int number;

    MonthName(int number){
        this.number=number;
    }

    public static String findName(int number){
        for(MonthName monthName:MonthName.values()){
            if(monthName.number==number){
                return monthName.name();
            }
        }
        throw new RuntimeException("Invalid Month!");
    }
}

然后为您想要的格式定义一个类:

class MyDateFormat{
    private int day;
    private String month;
    private int year;

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public String getMonth() {
        return month;
    }

    public void setMonth(String month) {
        this.month = month;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }
}

并最终创建一种用于分隔输入字符串的方法(2018年8月15日):

 public MyDateFormat getFormatedDate(String dateString) throws ParseException {

    SimpleDateFormat dateFormat=new SimpleDateFormat("MM/dd/yyyy");
    Date date = dateFormat.parse(dateString);

    Calendar calendar=Calendar.getInstance();
    calendar.setTime(date);

    MyDateFormat myDateFormat=new MyDateFormat();
    myDateFormat.setDay(calendar.get(Calendar.DAY_OF_MONTH));
    myDateFormat.setMonth(MonthName.findName(calendar.get(Calendar.MONTH)));
    myDateFormat.setYear(calendar.get(Calendar.YEAR));

    return myDateFormat;
}

祝你好运:)

答案 2 :(得分:0)

请尝试这个。

try {
    String str ="8/15/2018";
    Date date=new SimpleDateFormat("MM/dd/yyyy").parse(str);
    System.out.println("Hello! This is day " + new SimpleDateFormat("dd").format(date) +" of the month of " + new SimpleDateFormat("MMMM").format(date) +" in the year of our Lord " + new SimpleDateFormat("yyyy").format(date));
} catch (ParseException e) {
    e.printStackTrace();
}