Как получить сегодняшнюю дату? - PullRequest
39 голосов
/ 19 февраля 2011

Другими словами, я хочу функциональность, которая обеспечивает Joda-Time:

today = today.withTime(0, 0, 0, 0);

но без Joda-Time, только с java.util.Date.

Такие методы, как .setHours () и т. Д. Устарели. Есть ли более правильный путь?

Ответы [ 9 ]

54 голосов
/ 19 февраля 2011
Date today = new Date();
today.setHours(0); //same for minutes and seconds

Поскольку методы устарели, вы можете сделать это с помощью Calendar:

Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0); // same for minutes and seconds

А если вам нужен Date объект в конце, просто вызовите today.getTime()

12 голосов
/ 19 февраля 2011
Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);

DateUtils от Apache Commons-Lang. Следите за часовым поясом!

8 голосов
/ 20 октября 2015

Есть ли более правильный путь?

Да, есть.

LocalDate.now( 
    ZoneId.of( "America/Montreal" ) 
).atStartOfDay(
    ZoneId.of( "America/Montreal" )
)

java.time

Java 8 и новее сейчасимеет новый встроенный фреймворк java.time.См. Учебное пособие .Вдохновленный Joda-Time, определенным JSR 310 и расширенным проектом ThreeTen-Extra.

Примеры

Ниже приведены некоторые примеры с использованием java.time.Обратите внимание, как они указывают часовой пояс.Если опущено, текущий часовой пояс вашей JVM по умолчанию.Это значение по умолчанию может изменяться, даже изменяться в любой момент во время выполнения, поэтому я предлагаю вам указать часовой пояс явно, а не полагаться неявно на значение по умолчанию.

Вот пример только даты, без временидень и часовой пояс.

ZoneId zonedId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zonedId );
System.out.println( "today : " + today );

сегодня: 2015-10-19

Вот пример получения текущей даты-времени.

ZoneId zonedId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.now( zonedId );
System.out.println( "zdt : " + zdt );

При запуске:

Зд .: 2015-10-19T18: 07: 02.910-04: 00 [Америка / Монреаль]

Первый момент дня

Вопрос запрашивает дату-время, когда время установлено на ноль.Предполагается, что первым моментом дня всегда является время 00:00:00.0, но это не всегда так.Летнее время (DST) и, возможно, другие аномалии означают, что день может начаться в другое время, например 01:00.0.

К счастью, java.time имеет возможность определить первый момент дня, соответствующий определенному часовому поясу, LocalDate::atStartOfDay.Давайте посмотрим на некоторый код, используя LocalDate с именем today и ZoneId с именем zoneId из кода выше.

ZonedDateTime todayStart = today.atStartOfDay( zoneId );

zdt: 2015-10-19T00: 00: 00-04:00 [Америка / Монреаль]

Совместимость

Если у вас должен быть java.util.Date для использования с классами, которые еще не обновлены для работы с типами java.time,перерабатывать.Вызовите метод java.util.Date.from( Instant instant ).

java.util.Date date = java.util.Date.from( zdt.toInstant() );

О java.time

java.time Framework встроен в 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 SE 11 и более поздних версий - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большинство функций java.time перенесено в Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии реализации связки Android java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .

ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и больше .

8 голосов
/ 02 марта 2014
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));

найдено здесь

6 голосов
/ 19 февраля 2011

Если вы хотите полночь (0:00 утра) для текущей даты, вы можете просто использовать конструктор по умолчанию и обнулить порции времени:

Date today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0);

edit : обновление с Calendar, так как эти методы устарели

Calendar today = Calendar.getInstance();
today.clear(Calendar.HOUR); today.clear(Calendar.MINUTE); today.clear(Calendar.SECOND);
Date todayDate = today.getTime();
1 голос
/ 19 февраля 2017
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.util.Calendar;
import java.util.Date;


/**
 * * Java Program to get current day, month, year, and dayOfweek in both Java 8
 * * and before e.g. JDK 1.6 and JDK 1.7
 */

/**
 * @author AJMAL SHA
 *
 */
public class Test {
    public static void main(String[] args) { // Before Java 8
        Date today = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(today); // don't forget this if date is arbitrary
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 1 being Sunday
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
        int month = cal.get(Calendar.MONTH); // 0 being January
        int year = cal.get(Calendar.YEAR);
        System.out.println("current date : " + today);
        System.out.println("dayOfWeek from date in Java 6 : " + dayOfWeek);
        System.out.println("dayOfMonth from a date in Java 7 : " + dayOfMonth);
        System.out.println("dayOfYear from a date in Java 1.6 : " + dayOfYear);
        System.out.println("month from a date in Java 1.7 : " + month);
        System.out.println("year from date in JDK 6 : " + year); // In Java 8
        LocalDate currentDate = LocalDate.now();
        DayOfWeek dow = currentDate.getDayOfWeek();
        int dom = currentDate.getDayOfMonth();
        int doy = currentDate.getDayOfYear();
        Month m = currentDate.getMonth();
        int y = currentDate.getYear();
        System.out.println("current local date : " + currentDate);
        System.out.println("dayOfWeek from a date in Java 8 : " + dow);
        System.out.println("dayOfMonth from date in JDK 8: " + dom);
        System.out.println("dayOfYear from a date in Java SE 8 : " + doy);
        System.out.println("month from a date in Java 1.8 : " + m);
        System.out.println("year from date in JDK 1.8 : " + y);
    }
}

Выход ..

current date : Sun Feb 19 06:38:16 PST 2017
dayOfWeek from date in Java 6 : 1
dayOfMonth from a date in Java 7 : 19
dayOfYear from a date in Java 1.6 : 50
month from a date in Java 1.7 : 1
year from date in JDK 6 : 2017
current local date : 2017-02-19
dayOfWeek from a date in Java 8 : SUNDAY
dayOfMonth from date in JDK 8: 19
dayOfYear from a date in Java SE 8 : 50
month from a date in Java 1.8 : FEBRUARY
year from date in JDK 1.8 : 2017
0 голосов
/ 27 ноября 2018

Код для получения сегодняшней даты в любом конкретном формате

Вы можете определить желаемый формат в экземпляре SimpleDateFormat, чтобы получить дату в этом конкретном формате

 DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        String todaysdate = dateFormat.format(date);
         System.out.println("Today's date : " + todaysdate);

Перейдите по ссылкам ниже, чтобы увидеть действительную комбинацию формата даты.

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

КОД: чтобы получить x дней вперед или назад от даты сегодняшнего дня, чтобы получить прошедшую дату или будущую дату.

Например:

Сегодняшняя дата: 11/27/2018

xdayFromTodaysDate = 2, чтобы получить дату как 11/29/2018

xdayFromTodaysDate = -2, чтобы получить дату как 11/25/2018

  public String getAniversaryDate(int xdayFromTodaysDate ){

        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        cal.setTime(date);
        cal.add(Calendar.DAY_OF_MONTH,xdayFromTodaysDate);
        date = cal.getTime();
        String aniversaryDate = dateFormat.format(date);
        LOGGER.info("Today's date : " + todaysdate);
          return aniversaryDate;

    }

КОД: чтобы получить x дней вперед или назад от заданной даты

  public String getAniversaryDate(String givendate, int xdayFromTodaysDate ){


        Calendar cal = Calendar.getInstance();
        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        try {
            Date date = dateFormat.parse(givendate);
            cal.setTime(date);
            cal.add(Calendar.DAY_OF_MONTH,xdayFromTodaysDate);
            date = cal.getTime();
            String aniversaryDate = dateFormat.format(date);
            LOGGER.info("aniversaryDate : " + aniversaryDate);
            return aniversaryDate;
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }

    }
0 голосов
/ 23 июля 2018

Используйте этот код, чтобы легко получить дату и время:

package date.time;

import java.text.SimpleDateFormat;    
import java.util.Date;

public class DateTime {

    public static void main(String[] args) {
        SimpleDateFormat dnt = new SimpleDateFormat("dd/MM/yy :: HH:mm:ss");
        Date date = new Date();
        System.out.println("Today Date & Time at Now :"+dnt.format(date));  
    } 
}
0 голосов
/ 05 февраля 2013

Используйте этот код;

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

Это будет показано как:

5 февраля 2013 г. 12:39:02 PM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...