Java-программа для получения текущей даты без отметки времени
Мне нужна программа Java для получения текущей даты без отметки времени:
Date d = new Date();
дает дату и временную метку.
Но мне нужна только дата, без отметки времени. Я использую эту дату для сравнения с другим объектом даты, который не имеет метки времени.
При печати
System.out.println("Current Date : " + d)
of d он должен напечатать May 11 2010 - 00:00:00
.
Ответы
Ответ 1
A java.util.Date
объект является своеобразной меткой времени - он содержит несколько миллисекунд с 1 января 1970 года, 00:00:00 по UTC. Таким образом, вы не можете использовать стандартный объект Date
, чтобы содержать только день/месяц/год, без какого-либо времени.
Насколько я знаю, нет простого способа сравнить даты, учитывая только дату (а не время) в стандартном Java API. Вы можете использовать класс Calendar
и очистить час, минуты, секунды и миллисекунды:
Calendar cal = Calendar.getInstance();
cal.clear(Calendar.HOUR_OF_DAY);
cal.clear(Calendar.AM_PM);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
Сделайте то же самое с другим объектом Calendar
, который содержит дату, с которой вы хотите сравнить, и используйте методы after()
или before()
для сравнения.
Как объясняется в Javadoc java.util.Calendar.clear(int field):
Поля HOUR_OF_DAY, ЧАСЫ и AM_PM обрабатываются независимо и применяется правило разрешения для времени суток. При очистке одного из полей не reset значение часа дня этого Календаря. Используйте set (Calendar.HOUR_OF_DAY, 0) до reset значение часа.
edit - ответ выше с 2010 года; в Java 8 в пакете java.time
появился новый API с датой и временем, который намного более эффективен и полезен, чем старые классы java.util.Date
и java.util.Calendar
. Используйте новые классы даты и времени вместо старых.
Ответ 2
Вы всегда можете использовать класс apache commons 'DateUtils
. Он имеет статический метод isSameDay()
, который: "Проверяет, находятся ли два объекта даты в тот же день, игнорируя время".
static boolean isSameDay(Date date1, Date date2)
Ответ 3
Используйте DateFormat для решения этой проблемы:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
DateFormat dateFormat2 = new SimpleDateFormat("MM-dd-yyyy");
print(dateFormat.format(new Date()); // will print like 2014-02-20
print(dateFormat2.format(new Date()); // will print like 02-20-2014
Ответ 4
Я сделал следующее и работал: (Текущая дата без отметки времени)
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
Date today = dateFormat.parse(dateFormat.format(new Date()));
Ответ 5
Вы можете использовать
// Format a string containing a date.
import java.util.Calendar;
import java.util.GregorianCalendar;
import static java.util.Calendar.*;
Calendar c = GregorianCalendar.getInstance();
String s = String.format("Duke Birthday: %1$tm %1$te,%1$tY", c);
// -> s == "Duke Birthday: May 23, 1995"
Посмотрите Formatter
документацию по API.
Ответ 6
Вы можете получить к этой дате:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
print(dateFormat.format(new Date());
Ответ 7
DateFormat dateFormat = new SimpleDateFormat("MMMM dd yyyy");
java.util.Date date = new java.util.Date();
System.out.println("Current Date : " + dateFormat.format(date));
Ответ 8
Также вы можете использовать apache commons lib DateUtils.truncate()
:
Date now = new Date();
Date truncated = DateUtils.truncate(now, Calendar.DAY_OF_MONTH);
Время будет установлено на 00:00:00
, чтобы вы могли работать с этой датой или распечатывать ее:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(dateFormat.format(now); // 2010-05-11 11:32:47
System.out.println(dateFormat.format(truncated); // 2010-05-11 00:00:00
Ответ 9
private static final DateFormat df1 = new SimpleDateFormat("yyyyMMdd");
private static Date NOW = new Date();
static {
try {
NOW = df1.parse(df1.format(new Date()));
} catch (ParseException e) {
e.printStackTrace();
}
}
Ответ 10
принятый ответ Jesper верен, но теперь устарел. Классы java.util.Date и .Calendar, как известно, хлопотны. Избежать их.
java.time
Вместо этого используйте java.time framework, встроенный в Java 8 и более поздние версии, с обратной связью с Java 6 и 7 и далее адаптирован для Android.
Если вам действительно не нравятся временные и часовые пояса, используйте LocalDate
в java.time framework ().
LocalDate localDate = LocalDate.of( 2014 , 5 , 6 );
Помните, что если у вас есть какие-либо шансы иметь дело с другими часовыми поясами или UTC, это неправильный путь. Наивные программисты склонны думать, что им не нужны часовые пояса, когда они действительно делают.
Вызвать toString
для генерации строки в стандартном формате ISO 8601.
String output = localDate.toString();
2014-05-06
Для других форматов выполните поиск для класса DateTimeFormatter
.
Joda времени
Хотя теперь вытесняется java.time, вы можете использовать класс LocalDate
в Joda-Time библиотека (вдохновение для java.time).
LocalDate localDate = new LocalDate( 2014, 5, 6 );
Ответ 11
Я думаю, это сработает. Используйте Calendar, чтобы манипулировать полями времени (reset их до нуля), а затем получить дату из календаря.
Calendar c = GregorianCalendar.getInstance();
c.clear( Calendar.HOUR_OF_DAY );
c.clear( Calendar.MINUTE );
c.clear( Calendar.SECOND );
c.clear( Calendar.MILLISECOND );
Date today = c.getTime();
Или сделайте обратное. Поместите дату, которую вы хотите сравнить, в календаре и сравните даты календаря
Date compareToDate; // assume this is set before going in.
Calendar today = GregorianCalendar.getInstance();
Calendar compareTo = GregorianCalendar.getInstance();
compareTo.setTime( compareToDate );
if( today.get( Calendar.YEAR ) == compareTo.get( Calendar.YEAR ) &&
today.get( Calendar.DAY_OF_YEAR ) == compareTo.get( Calendar.DAY_OF_YEAR ) ) {
// They are the same day!
}
Ответ 12
Здесь неэлегантный способ сделать это быстро без дополнительных зависимостей.
Вы можете просто использовать java.sql.Date, который расширяет java.util.Date, хотя для сравнения вам придется сравнивать строки.
java.sql.Date dt1 = new java.sql.Date(System.currentTimeMillis());
String dt1Text = dt1.toString();
System.out.println("Current Date1 : " + dt1Text);
Thread.sleep(2000);
java.sql.Date dt2 = new java.sql.Date(System.currentTimeMillis());
String dt2Text = dt2.toString();
System.out.println("Current Date2 : " + dt2Text);
boolean dateResult = dt1.equals(dt2);
System.out.println("Date comparison is " + dateResult);
boolean stringResult = dt1Text.equals(dt2Text);
System.out.println("String comparison is " + stringResult);
Вывод:
Текущая дата1: 2010-05-10
Текущая дата2: 2010-05-10
Сравнение даты неверно
Сравнение строк истинно
Ответ 13
Я сделал следующее и работал:
calendar1.set(Calendar.HOUR_OF_DAY, 0);
calendar1.set(Calendar.AM_PM, 0);
calendar1.set(Calendar.HOUR, 0);
calendar1.set(Calendar.MINUTE, 0);
calendar1.set(Calendar.SECOND, 0);
calendar1.set(Calendar.MILLISECOND, 0);
Date date1 = calendar1.getTime(); // Convert it to date
Сделайте это для других экземпляров, которые вы хотите сравнить. Эта логика сработала для меня; Мне приходилось сравнивать даты, равные или нет, но вы можете делать разные сравнения (до, после, равно и т.д.).
Ответ 14
Если вы действительно хотите использовать "Дату" вместо "Календарь" для сравнения, это самый короткий фрагмент кода, который вы могли бы использовать:
Calendar c = Calendar.getInstance();
Date d = new GregorianCalendar(c.get(Calendar.YEAR),
c.get(Calendar.MONTH),
c.get(Calendar.DAY_OF_MONTH)).getTime();
Таким образом вы убедитесь, что значения часов/минут/секунд/миллисекундов пусты.
Ответ 15
Я искал одно и то же решение, и следующее работало для меня.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.clear(Calendar.HOUR);
calendar.clear(Calendar.MINUTE);
calendar.clear(Calendar.SECOND);
calendar.clear(Calendar.MILLISECOND);
Date today = calendar.getTime();
Обратите внимание, что я использую calendar.set(Calendar.HOUR_OF_DAY, 0) для HOUR_OF_DAY вместо использования метода clear, потому что это предлагается в методе Calendar.clear javadocs следующим образом
Поля HOUR_OF_DAY, HOUR и AM_PM обрабатываются независимо и применяется правило разрешения на время суток. Очистка полей не reset значение часа дня этого Календаря. Используйте set (Calendar.HOUR_OF_DAY, 0) до reset значение часа.
С вышеприведенным решением я получаю вывод как
Wed Sep 11 00:00:00 EDT 2013
Использование метода clear для HOUR_OF_DAY сбрасывает час в 12 при выполнении после 12:00 или 00 при выполнении до 12 часов.
Ответ 16
Вот мой код для получения только даты:
Calendar c=Calendar.getInstance();
DateFormat dm = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date date = new java.util.Date();
System.out.println("current date is : " + dm.format(date));