Я пытаюсь найти, в какой день месяца это.
Например, сегодня 29 августа 2010 года.
То, что я хотел бы сделать, это просто получить число дней, например, 29 или 30. Какой день месяца это.
Как я могу это сделать?
Я пытаюсь найти, в какой день месяца это.
Например, сегодня 29 августа 2010 года.
То, что я хотел бы сделать, это просто получить число дней, например, 29 или 30. Какой день месяца это.
Как я могу это сделать?
Вам нужно будет получить экземпляр календаря и получить его в день месяца
Calendar cal = Calendar.getInstance();
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
String dayOfMonthStr = String.valueOf(dayOfMonth);
Вы также можете получить DAY_OF_WEEK, DAY_OF_YEAR, DAY_OF_WEEK_IN_MONTH и т.д.
Следующий способ поможет вам найти день любой указанной даты:
public static int getDayOfMonth(Date aDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(aDate);
return cal.get(Calendar.DAY_OF_MONTH);
}
Посмотрите GregorianCalendar
, что-то вроде:
final Calendar now = GregorianCalendar.getInstance()
final int dayNumber = now.get(Calendar.DAY_OF_MONTH);
LocalDate.now(
ZoneId.of( "America/Montreal" )
).getDayOfMonth()
Современный подход - это класс LocalDate
для представления значения только для даты.
Часовой пояс имеет решающее значение для определения текущей даты. Для любого данного момента дата изменяется по всему миру по зонам.
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate ld = LocalDate.now( z ) ;
int dayOfMonth = ld.getDayOfMonth();
Вы также можете получить день недели.
DayOfWeek dow = ld.getDayOfWeek();
UPDATE: проект Joda-Time теперь находится в режиме обслуживания и рекомендует переносить классы java.time.
Используя Joda-Time 2.5 библиотеку, а не печально известные классы java.util.Date и .Calendar.
Часовой пояс имеет решающее значение для определения даты. Лучше указывать зону, а не полагаться неявно на назначенный часовой пояс JVM, назначаемый по умолчанию.
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone ).withTimeAtStartOfDay();
int dayOfMonth = now.getDayOfMonth();
Или используйте аналогичный код с классом LocalDate
, у которого нет времени на время.
Вы можете начать с чтения документации для Date. Затем вы понимаете, что методы Dates устарели и вместо этого вместо Calender.
Calendar now = Calendar.getInstance();
System.out.println(now.get(Calendar.DAY_OF_MONTH));
Обновление Java 8
В Java 8 представлены следующие пакеты для обработки времени и даты.
java.time.*;
java.time.format.*;
java.time.chono.*;
java.time.temporal.*;
java.time.zone.*;
Они более организованные и интуитивно понятные.
Нам нужны только два лучших пакета для обсуждения.
Существует 3 класса верхнего уровня - LocalDate
, LocalTime
, LocalDateTime
для описания Date, Time и DateTime соответственно. Хотя они правильно отформатированы в toString()
, каждый класс имеет форматный метод, который принимает DateTimeFormatter
для форматирования по-своему.
DateTimeFormatter
также можно использовать дату, указанную в день. У него мало
import java.time.*;
import java.time.format.*;
class DateTimeDemo{
public static void main(String...args){
LocalDateTime x = LocalDateTime.now();
System.out.println(x.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)));//Shows Day and Date.
System.out.println(x.format(DateTimeFormatter.ofPattern("EE")));//Short Form
System.out.println(x.format(DateTimeFormatter.ofPattern("EEEE")));//Long Form
}
}
ofLocalizedTime
принимает FormatStyle
, который является перечислением в java.time.format
ofPattern
принимает String
с ограниченными символами шаблона ограниченной длины. Вот символы, которые можно передать в метод toPattern
.
Вы можете попробовать различное количество шаблонов, чтобы увидеть, как будет работать вывод.
Подробнее о Java 8 DateTime API здесь
//This will get you the day of the month
String.valueOf((Calendar.getInstance()).get(Calendar.DAY_OF_MONTH))