Я пытаюсь добраться до и от дата, где современных
будет иметь предыдущую дату и 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()));
попробовать
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));
как получить первый день текущего месяца правильно?
LocalDate.now()
.with( TemporalAdjusters.firstDayOfMonth() )
Или...
YearMonth.now().atDay( 1 )
Или...
LocalDate.now().with ( ChronoField.DAY_OF_MONTH , 1 )
[На языке Java.время][1] Framework в Java 8, а позднее вытесняет старый Java.утиль.Дата/.Календарь классов. Старые классы оказались хлопотно, запутанным и ошибочным. Избегать их. На Java.временные рамки вдохновлен весьма успешная Joda времени библиотека, определяемый в JSR 310, продлен ThreeTen-лишний проект, и объяснил в учебник.
LocalDate
На сегодняшний день-единственная ценность, без времени суток, использовать LocalDate класс. В то время как LocalDate
не присвоены часовом поясе, мы должны указать часовой пояс для того, чтобы определить дату, такую как “сегодня”. Например, новый день наступает раньше в Париже, чем в МонтрéАль.
Часовой пояс имеет решающее значение в определении сегодня's дата. На данный момент, дата меняется вокруг мир Зоны. Опуская часовом поясе, означает, что текущая зона для JVM время будет автоматически применяться при определении текущей даты. Любой код в JVM может изменить по умолчанию во время выполнения, так что вы шагаете по зыбучим пескам. Лучше указать желаемые/ожидаемые часовом поясе явно, чем неявно опираемся на действующую по умолчанию.
Укажите правильный часовой пояс имя в формате континента/региона, таких как [
Америка/Монреаль](https://en.wikipedia.org/wiki/America/Montreal), [
Африка/Касабланка](https://en.wikipedia.org/wiki/Africa/Casablanca), или Тихоокеанская/Окленд. Никогда не используйте 3-4 буквенные аббревиатуры, такие как
естьили
ист`, как они не правда часовые пояса, не нормируется, и даже не уникальный(!).
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
][2]. Для ваших целей, вы найдете удобный реализаций в [TemporalAdjusters
][3] класс (заметьте, во множественном числеы
), в частности [firstDayOfMonth
][4].
LocalDate firstOfCurrentMonth = today.with( TemporalAdjusters.firstDayOfMonth() ) ;
ZonedDateTime
Если вам нужно время, помните, что 00:00:00.000
не всегда в первую минуту дня из-за перехода на летнее время (DST) и, возможно, другие аномалии. Так что давайте Ява.время определить правильное время первый момент дня.
ZonedDateTime zdt = firstOfCurrentMonth.atStartOfDay ( zoneId );
2015-11-01T00:00-04:00[Америка/Монреале]
Об Ява.время
В [Ява.время] основы(http://docs.oracle.com/javase/9/docs/api/java/time/package-summary.html) построен в Java 8 и выше. Эти классы вытеснить хлопотно старый наследие Дата Время классы, такие как
Ява.утиль.Даты
,календарь
, &класса simpledateformat
. В Joda времени проекта, теперь в режиме техническое обслуживание, советует миграции Ява.время классы. Чтобы узнать больше, см. учебник по Oracle. Поиск переполнения стека для многих примеров и объяснений. Спецификация в JSR 310. Где получить Ява.классы время?
- Java на SE 8, Java на SE 9, а позже
- Встроенная.
- Часть стандартных Java API с пакетной реализации.
- Ява 9 добавляет некоторые незначительные функции и исправления.
- Версии SE 6 и Java на SE 7
- Большая часть Java.функциональность время портированы с Java 6 & 7 в ThreeTen-бэкпортировать.
- Планшет
- В более поздних версиях набор реализаций для Android на Java.классы время. На раньше планшет, [ThreeTenABP] проект(https://github.com/JakeWharton/ThreeTenABP) адаптация ThreeTen-бэкпортировать (упоминалось выше). Смотрите как использовать ThreeTenABP.... В ThreeTen-Экстра проект расширяется Java.время дополнительных занятий. Этот проект является полигоном для возможных будущих дополнений к Java.время. Вы можете найти некоторые полезные классы, такие как
интервал
,YearWeek
,YearQuarter
, и подробнее.
Время Джода
Если я правильно понимаю вопрос, то это можно сделать очень легко с помощью времени Джода
LocalDate fromDate = new LocalDate().withDayOfMonth(1);
LocalDate toDate = new LocalDate().minusDays(1);
Если вы также хотите, чтобы время устанавливается в 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/
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());
}
Вы можете использовать withDayOfMonth(тип int dayOfMonth)
способ с java8 для возврата первый день месяца:
LocalDate firstDay = LocalDate.now().withDayOfMonth(1);
System.out.println(firstDay); // 2019-09-01