如何使用当前日期作为函数输入获取月份名称

时间:2013-09-14 20:27:00

标签: java android date

如何创建一个获取当前日期和返回月份名称的功能?
我只关注其当前日期,可以是2013/4/12或23/8/8之类的任何日期。

String monthName("2013/9/11");
当调用此函数返回月份名称时。

6 个答案:

答案 0 :(得分:16)

这应该没问题。

这取决于日期的格式。 如果你试试2011年2月1日 它会工作,只需根据您的需要更改此字符串“MMMM d,yyyy”。 检查this是否有所有格式模式。

而且,月份基于0,所以如果你想1月份为1,那么只需返回月份+ 1

   private static int getMonth(String date) throws ParseException{  
            Date d = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(date);
            Calendar cal = Calendar.getInstance();
            cal.setTime(d);
            int month = cal.get(Calendar.MONTH);
            return month + 1;
    }

如果你想要月份名称,试试这个

private static String getMonth(String date) throws ParseException{  
    Date d = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(date);
    Calendar cal = Calendar.getInstance();
    cal.setTime(d);
    String monthName = new SimpleDateFormat("MMMM").format(cal.getTime());
    return monthName;
}

正如我所说,检查我发布的所有格式模式的网页。如果您只想要月份的3个字符,请使用“MMM”而不是“MMMM”

答案 1 :(得分:1)

java.time

我正在提供现代的答案。

    System.out.println(LocalDate.of(2013, Month.SEPTEMBER, 11) // Define the date
            .getMonth()                                        // Get the month
            .getDisplayName(                                   // Get the month name
                    TextStyle.FULL_STANDALONE,                 // No abbreviation
                    Locale.ENGLISH));                          // In which language?

输出为:

9月

  1. 使用java.time(现代Java日期和时间API)中的LocalDate作为日期。
  2. 使用LocalDate.getMonth()Month.getDisplayName()获取月份名称。
  3. 避免在2013年的旧答案中使用DateCalendarSimpleDateFormat。这些类的设计不良,麻烦且过时。现代的API更好用。为此,还应避免使用switch / case,因为已经内置了月份名称,并且使用库方法可以使您的代码更清晰,更简洁,更易于出错。

使用LocalDate

    LocalDate today = LocalDate.now(ZoneId.systemDefault());
    LocalDate aDate = LocalDate.of(2013, Month.SEPTEMBER, 11); // 2013/9/11
    LocalDate anotherDate = LocalDate.of(2023, 8, 8); // 23/8/8

如果将日期作为字符串输入,请使用DateTimeFormatter解析字符串:

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("u/M/d");
    String stringInput = "2013/4/12";
    LocalDate date = LocalDate.parse(stringInput, dateFormatter);
    System.out.println(date);

2013-04-12

使用LocalDate.getMonth()和Month.getDisplayName()

要获取月份名称,您首先需要确定要使用哪种语言。我以英语为例,仍然使用上一摘录中的date

    String monthName = date.getMonth()
            .getDisplayName(TextStyle.FULL_STANDALONE, Locale.ENGLISH);
    System.out.println(monthName);

4月

Java用多种语言知道月份名称。如果要使用用户的语言表示月份名称,请将Locale.getDefault()作为第二个参数传递给getDisplayName()

链接

Oracle tutorial: Date Time解释了如何使用java.time。

答案 2 :(得分:0)

使用此代码 -

Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        int month =  calendar.get(Calendar.MONTH);

所以现在你有了月号,你可以使用switch case获取那个月的名字。

如果您的日期是字符串格式,请使用此 -

Date date = new SimpleDateFormat("yyyy-MM-dd").format(d)

答案 3 :(得分:0)

通过名称获取当前月份的简单解决方案:

SimpleDateFormat formatterMonth = new SimpleDateFormat("MMMM");
String currentMonth = formatterMonth.format(new Date(System.currentTimeMillis()));

使用名称以2013/9/11格式获取任何月份的功能:(未测试)

private String monthName(String dateToCheck){
    Date date = new Date();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
    date = formatter.parse(dateToCheck);
    SimpleDateFormat formatterMonth = new SimpleDateFormat("MMMM");
    return formatterMonth.format(new Date(date.getTime()));
}

答案 4 :(得分:0)

我正在使用这样的函数:

public String getDate(String startDate) throws ParseException {
    @SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date d = null;
    try {
        d = sdf.parse(startDate);
        sdf.applyPattern("MMMM dd, YYYY"); //this gives output as=> "Month date, year"
    } catch (Exception e) {
        Log.d("Exception", e.getLocalizedMessage());
    }

    return sdf.format(d);
}

答案 5 :(得分:-2)

您可以获得其他答案中描述的月份“数字”,然后您只需使用开关获取名称即可。 例如:

switch(month) {
case 0:
   your name is January
   break;
...
}

P.S。我认为几个月是零基础但我不是百分之百确定...