Получение только месяца с даты и указание названия месяца в java - PullRequest
0 голосов
/ 13 февраля 2019

Я извлек дату месяца и года из текстового файла, так что теперь я хочу получить только часть месяца, и мне нужно получить название месяца, которое я сделал следующим образом

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Ожидаемый результат: только название месяца

Ответы [ 4 ]

0 голосов
/ 13 февраля 2019

Николас К уже дал ответ, в котором хорошо показано использование 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);
    }

Вывод:

май

Янемедленный анализ всей строки путем добавления литерального текста в кавычки в строку шаблона формата.Я печатаю локализованное название месяца - здесь на французском, но вы можете выбрать другой язык.Вы также можете сократить его, если хотите.

Редактировать: Василий Бурк любезно отредактировал мой код, изложив в комментариях, что делает каждый метод и аргумент.Это делает код длинным, но отлично подходит для объяснения в ответе переполнения стека.В производственном коде вы, вероятно, используете однострочник:

        System.out.println(date.getMonth().getDisplayName(TextStyle.FULL, Locale.FRENCH));
0 голосов
/ 13 февраля 2019

Используя java-8 LocalDate , вы можете просто сделать:

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

, что дает вывод в виде MAY

0 голосов
/ 13 февраля 2019

Вы можете использовать Calendar из пакета java.utils:

    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".

0 голосов
/ 13 февраля 2019
//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.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...