Получить первую дату текущего месяца в java
Я пытаюсь добраться до и с даты, когда ToDate
будет иметь предыдущую дату, а FromDate
будет иметь первую дату текущего месяца. Для января это будет 1/1/2013
и так далее. Как правильно получить первую дату текущего месяца? Я не могу этого сделать.
today.add(Calendar.DAY_OF_MONTH, -1);
java.util.Date previousDay=today.getTime();
ToDate = sdfFile1.format(newjava.sql.Date(previousDay.getTime()));
today.add(Calendar.DATE, 1);
java.util.Date nextDay=today.getTime();
FromDate = sdfFile1.format(new java.sql.Date(nextDay.getTime()));
Ответы
Ответ 1
пытаться
Calendar c = Calendar.getInstance(); // this takes current date
c.set(Calendar.DAY_OF_MONTH, 1);
System.out.println(c.getTime()); // this returns java.util.Date
Обновлено (начиная с Java 8):
import java.time.LocalDate;
LocalDate todaydate = LocalDate.now();
System.out.println("Months first date in yyyy-mm-dd: " +todaydate.withDayOfMonth(1));
Ответ 2
ТЛ; др
Как правильно получить первую дату текущего месяца?
LocalDate.now()
.with( TemporalAdjusters.firstDayOfMonth() )
Или…
YearMonth.now().atDay( 1 )
Или…
LocalDate.now().with ( ChronoField.DAY_OF_MONTH , 1 )
java.time
Рамка java.time в Java 8 и более поздних версиях вытесняет старые классы java.util.Date/.Calendar. Старые классы оказались хлопотными, запутанными и ошибочными. Избежать их.
Рамка java.time вдохновлена очень успешной библиотекой Joda-Time, определенной JSR 310, расширенной проектом ThreeTen-Extra и объясненной в учебнике.
LocalDate
Для значения даты только без использования дня используйте класс LocalDate
. Хотя LocalDate
не имеет назначенного часового пояса, мы должны указать часовой пояс, чтобы определить дату, такую как "сегодня". Например, в Париже новый день предстает раньше, чем в Монреале.
Часовой пояс имеет решающее значение для определения сегодняшней даты. В любой данный момент дата изменяется по всему миру по зонам. Опускание часового пояса означает, что текущий часовой пояс JVM автоматически применяется при определении текущей даты. Любой код в JVM может изменять значение по умолчанию во время выполнения, поэтому вы ходите по смещающимся пескам. Лучше указывать желаемый/ожидаемый часовой пояс явно, чем неявно ссылаться на текущий дефолт.
Укажите правильное название часового пояса в формате continent/region
, например, America/Montreal
, Africa/Casablanca
или Pacific/Auckland
. Никогда не используйте аббревиатуру 3-4 букв, такую как EST
или IST
поскольку они не являются настоящими часовыми поясами, не стандартизированы и даже не уникальны (!).
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
LocalDate today = LocalDate.now ( zoneId );
LocalDate firstOfCurrentMonth = today.with ( ChronoField.DAY_OF_MONTH , 1 );
Сбросьте консоль.
System.out.println ( "For zoneId: " + zoneId + " today is: " + today + " and first of this month is " + firstOfCurrentMonth );
Для zoneId: Америка/Монреаль сегодня: 2015-11-08 и первый из этого месяца - 2015-11-01
Кроме того, используйте TemporalAdjuster
. Для вашей цели вы найдете удобные реализации в классе TemporalAdjusters
(обратите внимание на множественное число s
), в частности firstDayOfMonth
.
LocalDate firstOfCurrentMonth = today.with( TemporalAdjusters.firstDayOfMonth() ) ;
ZonedDateTime
Если вам нужно время суток, помните, что 00:00:00.000
не всегда является первым моментом дня из-за летнего времени (DST) и, возможно, других аномалий. Поэтому пусть java.time определяет правильное время первого момента дня.
ZonedDateTime zdt = firstOfCurrentMonth.atStartOfDay ( zoneId );
2015-11-01T00: 00-04: 00 [Америка/Монреаль]
О java.time
Рамка java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют неприятные старые устаревшие классы времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь в режиме обслуживания, советует перейти на классы java.time.
Чтобы узнать больше, ознакомьтесь с учебным пособием Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация - JSR 310.
Где можно получить классы java.time?
- Java SE 8, Java SE 9 и более поздние версии
- Встроенный.
- Часть стандартного Java API с интегрированной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- Большая часть функциональных возможностей java.time включена обратно в Java 6 и 7 в ThreeTen-Backport.
- Android
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и другие.
Ответ 3
Calendar date = Calendar.getInstance();
date.set(Calendar.DAY_OF_MONTH, 1);
Ответ 4
Время в Джоде
Если я правильно понимаю вопрос, это можно сделать очень легко, используя время joda
LocalDate fromDate = new LocalDate().withDayOfMonth(1);
LocalDate toDate = new LocalDate().minusDays(1);
Ответ 5
Если вы также хотите, чтобы время было 0, код:
import java.util.*;
import java.text.*;
public class DateCalculations {
public static void main(String[] args) {
Calendar aCalendar = Calendar.getInstance();
aCalendar.set(Calendar.DATE, 1);
aCalendar.set(Calendar.HOUR_OF_DAY, 0);
aCalendar.set(Calendar.MINUTE, 0);
aCalendar.set(Calendar.SECOND, 0);
Date firstDateOfCurrentMonth = aCalendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zZ");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String dayFirst = sdf.format(firstDateOfCurrentMonth);
System.out.println(dayFirst);
}
}
Вы можете легко проверить онлайн без компиляции, используя:
http://www.browxy.com/
Ответ 6
Работает как очарование!
public static String getCurrentMonthFirstDate(){
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 1);
DateFormat df = new SimpleDateFormat("MM-dd-yyyy");
//System.out.println(df.format(c.getTime()));
return df.format(c.getTime());
}
//Исправление: output = 02-01-2018 ![enter image description here]()
Ответ 7
how to store satrtdate value in date1 i don't want to put value manually
<%
Calendar date = Calendar.getInstance();
date.set(Calendar.DAY_OF_MONTH, 1);
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String startDate=df.format(date.getTime());
out.println("this is start date"+startDate);
%>
<%
Calendar cal = Calendar.getInstance();
int day = cal.get(cal.DAY_OF_WEEK);
int days=day-1;
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date date1 = df.parse("1/03/2014");
Date date2 = new Date();
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
int numberOfDays = 0;
while (cal1.before(cal2)) {
if ((Calendar.SATURDAY != cal1.get(Calendar.DAY_OF_WEEK))&&(Calendar.SUNDAY != cal1.get(Calendar.DAY_OF_WEEK)))
{
numberOfDays++;
session.setAttribute("numberOfDays",numberOfDays);
cal1.add(Calendar.DATE,1);
}else {
cal1.add(Calendar.DATE,1);
}
}
%>