当前位置: 代码迷 >> java >> 仅从日期中获取月份并在java中给出月份名称
  详细解决方案

仅从日期中获取月份并在java中给出月份名称

热度:108   发布时间:2023-07-31 10:59:23.0

我已经从文本文件中获取了日期月份和年份,所以现在我只想获取月份部分,我必须获取月份名称我已经这样做了

String s;
String keyword = "Facture du";

while ((s = br.readLine()) != null) {
    if (s.contains(keyword)) {
    //  s= s.replaceAll("\\D+","");

        System.out.println(s);
    }
}

实际产量: Facture du 28/05/2018
预期输出:仅月份名称

使用java-8的你可以这样做:

String strDate = "28/05/2018";
DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate localDate = LocalDate.parse(strDate, format);
System.out.println(localDate.getMonth());

它输出为MAY

Nicholas K已经提供了一个很好地展示java.time使用的答案。 我只想补充一点,java.time可以比那里显示的更多。

    DateTimeFormatter factureLineFormatter
            = DateTimeFormatter.ofPattern("'Facture du' dd/MM/uuuu");

    String keyword = "Facture du";
    String s = "Facture du 28/05/2018";
    if (s.contains(keyword)) {
        LocalDate date = LocalDate.parse(s, factureLineFormatter);
        Month month = date.getMonth();  // Extract a `Month` enum object.
        String output = 
            month.getDisplayName(       // Get localized name of month.
                TextStyle.FULL,         // How long or abbreviated should the month name be.
                Locale.FRENCH)          // `Locale` determines the human language used in translation, and the cultural norms used in abbreviation, punctuation, and capitalization.
        ;
        System.out.println(output);
    }

输出:

我通过在格式模式字符串中添加引号中的文字文本来立即解析整行。 我正在打印本地化的月份名称 - 这里是法语,但您可以选择其他语言。 如果您愿意,也可以选择缩写。

编辑: Basil Bourque友好地编辑了我的代码,在评论中拼写出每个方法和参数的作用。 这使得代码看起来很长,但对于Stack Overflow答案中的解释非常有用。 在生产代码中,您可能会使用单行代码:

        System.out.println(date.getMonth().getDisplayName(TextStyle.FULL, Locale.FRENCH));
//required imports
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

//your class declaration, other methods, etc...

//you should declare your Pattern here, for performance reasons:

private static final Pattern pat = Pattern.compile("\\d\\d/\\d\\d/\\d\\d\\d\\d");

//the actual month extractor:
public String getMonthFromString(String s) {
    //Your Pattern object uses the regular expression for your date,
    //to extract it from your String.
    //Then, you use a Matcher to search through your String:

    Matcher mat = pat.matcher(s);

    //The matcher can find every occurence of the pattern on your String.
    //Let's assume you only want the first:

    if(mat.find()) {
        String date = mat.group();

        //Now you have your date `String`. From there, you can parse
        //your date to a LocalDate object and extract its month:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        LocalDate dateObj = LocalDate.parse(date, formatter);

        String month = dateObj.getMonth();
        return month;
    }
    else {
        //handle situations when the String doesn't hold a date.
    }
}

您可以使用java.utils包中的Calendar

    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    Date date = format.parse("28/05/2018");
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    System.out.println(cal.getDisplayName(Calendar.MONTH, Calendar.LONG_FORMAT, Locale.FRENCH));

我假设你说法语,想要显示法语名称。 否则,您需要调整Locale参数。

对于您的日期,此代码将输出“mai”。

  相关解决方案