Генерация месяца в символе из календаря Java в переменную

Добрый день всем,

Я пытался создать переменную даты с помощью календаря Java, вот мой пример кода:

long day = System.currentTimeMillis();
Calendar cal = Calendar.getInstance();
java.text.SimpleDateFormat month = new java.text.SimpleDateFormat("MMM"); // not sure how to assign this value inside
cal.setTimeInMillis(day);
cal.set(Calendar.HOUR_OF_DAY, 00);
cal.set(Calendar.MINUTE, 00);
cal.set(Calendar.SECOND, 00);
cal.set(Calendar.MILLISECOND, 000);
Date todayDate = cal.getTime();

Timestamp current = new Timestamp(todayDate.getTime());

Тем не менее, значение current Я понимаю 2014-01-13 00:00:00.0, Я предпочитаю устанавливать 01 в Jan вместо.

Есть идеи по этому поводу?

5 ответов

Решение

Вы имеете в виду что-то подобное?

        long day = System.currentTimeMillis();
        Calendar cal = Calendar.getInstance();
        java.text.SimpleDateFormat month = new java.text.SimpleDateFormat("yyyy-MMM-dd HH:mm:ss:S"); // not sure how to assign this value inside
        cal.setTimeInMillis(day);
        cal.set(Calendar.HOUR_OF_DAY, 00);
        cal.set(Calendar.MINUTE, 00);
        cal.set(Calendar.SECOND, 00);
        cal.set(Calendar.MILLISECOND, 000);
        Date todayDate = cal.getTime();

        Timestamp current = new Timestamp(todayDate.getTime());
        System.out.println(month.format(current));

Урожайность:

2014-Янв-13 00:00:00:0

Пожалуйста, проверьте SimpleDateFormat для большего количества вариантов форматирования.

Вы можете попробовать это

    long day = System.currentTimeMillis();
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat month = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss:S");
    cal.setTimeInMillis(day);     
    cal.set(Calendar.HOUR_OF_DAY, 00);
    cal.set(Calendar.MINUTE, 00);
    cal.set(Calendar.SECOND, 00);
    cal.set(Calendar.MILLISECOND, 000);
    Date todayDate = cal.getTime();

    Timestamp current = new Timestamp(todayDate.getTime());
    System.out.println(month.format(current));

Теперь вышли:

    2014-Jan-13 00:00:00:0

ideone

ТЛ; др

Избегайте хлопотных устаревших классов даты и времени. Используйте только классы java.time.

LocalDate.now()                  // Determine the current date as seen in the wall-clock time in use by JVM’s current default time zone. Better to specify explicitly your desired/expected time zone.
         .getMonth()             // Get the `Month` enum object representing the month of that `LocalDate` object’s date value.
         .getDisplayName(        // Let the `Month` enum object automatically localize to generate the string of the name of the month.
             TextStyle.SHORT ,   // Specify how long or abbreviate you want the text of the name of the month.
             Locale.US           // Specify a `Locale` to determine the human language and cultural norms to be used in localizing the name of the month.
         )                       // Return a String.

январь

java.time

Современный подход использует классы java.time.

Получение текущего месяца означает определение текущей даты. А для получения текущей даты требуется часовой пояс, так как в любой данный момент дата меняется по всему земному шару в зависимости от зоны.

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate ld = LocalDate.now( z ) ;
Month m = ld.getMonth();

Пусть Month enum автоматически локализует название месяца. Контролируйте сокращение, передавая TextStyle,

String output = m.getDisplayName( TextStyle.SHORT , Locale.US );

апрель

Дата со временем

Если ваша цель - объединить время суток с вашей датой, используйте ZonedDateTime учебный класс. Вы должны указать часовой пояс, чтобы определить первый момент дня. День не начинается в 00:00:00 в некоторые даты в некоторых зонах.

ZonedDateTime zdt = ld.atStartOfDay( z ) ;  // Determine the first moment of the day.

Не использовать java.sql.Timestamp с целью генерации строки. Использовать DateTimeFormatter класс, задокументированный во многих других Ответах о переполнении стека.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MMM-dd HH:mm:ss" , Locale.US ) ;
String output = zdt.format( f ) ;

Или просто позвоните ZonedDateTime::toString для генерации строки в стандартном формате ISO 8601, расширенной для добавления имени зоны в квадратных скобках.

String output = zdt.toString() ;

Действительно, не используйте Timestamp совсем. Этот класс предназначен для использования с базами данных и теперь заменен на Instant с JDBC 4.2 и позже.


О java.time

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

Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.

Чтобы узнать больше, смотрите Oracle Tutorial. И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310.

Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.* классы.

Где взять классы java.time?

  • Java SE 8, Java SE 9, Java SE 10 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport.
  • Android
    • Более поздние версии Android связывают реализации классов java.time.
    • Для более ранних версий Android (<26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). Смотрите Как использовать ThreeTenABP….

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

// не уверен, как присвоить это значение внутри

вот и ты..;)

yy = year (2 digit)
yyyy = year (4 digit)
M = month of the year
MM = month of the year (leading 0)
MMM = month of the year (short text)
MMMM = month of the year (full text)
d = day of the month
dd = day of the month (leading 0)
h = hour (1-12)
H = hour (0-23)
m = minute of the hour
s = second of the minute
S = milisecond
E = day of the week (short)
EEEE = day of the week (full)
D = day of the Year

Дополнительная ссылка на класс SimpleDateFormat

Так как вы ищете текущую дату, вам не нужно currentTimeMillis(),

Вместо этого вы можете сделать следующее, чтобы получить желаемый результат.

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss.S");
System.out.println(sdf.format(cal.getTime()));
Другие вопросы по тегам