Подтвердить что ты не робот

Получить первую дату текущего месяца в 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()));
4b9b3361

Ответ 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
    • Более поздние версии реализаций пакетов Android классов java.time.
    • Для более ранних Android проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). См. Раздел Как использовать ThreeTenABP....

Проект 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);
        }

    }



    %>