Как получить Век от даты на Яве - PullRequest
8 голосов
/ 03 июня 2011

Как узнать текущий век с даты на Java?

Например, дата "06/03/2011" в соответствии с форматом "MM/dd/yyyy". Как я могу получить текущий век с этой даты, используя SimpleDateFormat?

Ответы [ 5 ]

12 голосов
/ 03 июня 2011
Date date = new SimpleDateFormat("MM/dd/yyyy").parse(yourString);

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

int century = (calendar.get(Calendar.YEAR) / 100) +1;
11 голосов
/ 27 апреля 2017

Небольшое изменение в том, что написал Гарри Лайм.Его логика не совсем верна.Год 1901 будет 20-м веком, а 1900 год - 19-м веком

public class CenturyYear {

    public static void main(String[] args) {
        int test = centuryFromYear(1900);
        System.out.println(test);

    }

    static int centuryFromYear(int year) {
        if (year % 100 == 0) {
            year = year / 100;
        } else {
            year = (year / 100) + 1;
        }
        return year;
    }

}
3 голосов
/ 10 августа 2016

Другие ответы верны, но устарели.

java.time

Инфраструктура java.time встроена в Java 8 и более поздние версии.Эти классы вытесняют старые проблемные классы даты и времени, такие как java.util.Date, .Calendar и & java.text.SimpleDateFormat.

Теперь в режиме обслуживания , проект Joda-Time также рекомендует перейти на java.time.

Чтобы узнать больше, см. Oracle Tutorial .И найдите в Stack Overflow множество примеров и объяснений.

Большая часть функциональности java.time перенесена в Java 6 & 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP .

Проект ThreeTen-Extra расширяет java.time дополнительными классами.Этот проект является испытательным полигоном для возможных будущих дополнений в java.time.

LocalDate

Класс LocalDate представляет значение только для даты без времени-дня и без часового пояса.

Для разбора укажите шаблон форматирования.Кстати, я предлагаю использовать стандартные форматы ISO 8601, которые могут быть проанализированы непосредственно классами java.time.

String input = "06/03/2011";

DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MM/dd/uuuu" ).withLocale ( Locale.US );
LocalDate ld = LocalDate.parse ( input , f );

Чтобы получить век, просто возьмите номер года и разделите на 100. Если вы хотите порядковый номер , «двадцать первый век» для 20xx, добавить единицу.

int centuryPart = ( ld.getYear () / 100 );
int centuryOrdinal = ( ( ld.getYear () / 100 ) + 1 );

Дамп на консоль.

System.out.println ( "input: " + input + " | ld: " + ld + " | centuryPart: " + centuryPart + " | centuryOrdinal: " + centuryOrdinal );

вход: 06 /03/2011 |лд: 2011-06-03 |век часть: 20 |Порядковый век: 21

0 голосов
/ 03 июня 2011

Разделите его на слэши, получите первые два символа третьего элемента в результирующем массиве, Integer.parseInt и добавьте 1, то есть: String arr = myDate.split("/"); String shortYear = myDate[2].substring(0, 2); int century = Integer.parseInt(shortYear) + 1; (не уверен в синтаксисе substring () в верхней частимоя голова)

0 голосов
/ 03 июня 2011

Я ничего не знаю о Java, но почему бы вам просто не получить полный год и сделать последние 2 цифры 0?

РЕДАКТИРОВАТЬ

Если вы хотите2011 год станет 21-м веком - просто получите полный год в строковом формате, затем отбросьте последние 2 символа, затем проанализируйте int и добавьте 1!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...