Генерация месяца в символе из календаря 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
ТЛ; др
Избегайте хлопотных устаревших классов даты и времени. Используйте только классы 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()));