Получение сегодняшней даты в java - я пробовал обычные способы
Мне нужна сегодняшняя дата - и нулевое что-нибудь еще ( "05/06/08 00:00:00" )
Я пробовал
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 0);
Date date1 = calendar.getTime();
System.out.println(date1);
Запуск: (Это серьезно испортилось)
Если час на компьютере равен < 12:00 в полдень: Вс Мар 08 00:44:39 IST 2009
Если час на компьютере составляет > 12:00 в полдень: Вс Мар 08 12:46:53 IST 2009
Итак, я дал это.
Все установщики даты устарели (кроме времени эпохи) - поэтому я не хочу их использовать.
Единственное, о чем я мог думать, это
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String sDate = dateFormat.format(calendar.getTime());
Date today = dateFormat.parse(sDate);
Но это такой хромой код, который я не могу заставить написать.
Любая другая опция?
Спасибо!
Ответы
Ответ 1
Мой стандартный совет для вопросов даты и времени Java: не используйте java.util.{Calendar,Date}
. Используйте Joda Time. Таким образом, вы можете представить дату как date (без соответствующего часового пояса) вместо даты/времени. Или вы можете использовать DateMidnight
, если это то, что вы хотите представить. (Будьте осторожны с комбинациями часового пояса и даты, где нет полуночи, хотя...)
Что вам нужно использовать Date
с? Если вам удастся сменить использование Joda, это здорово. В противном случае вы можете использовать Joda, чтобы делать то, что хотите, а затем конвертировать в миллисекунды (а затем в java.util.Date
), когда вам действительно нужно.
(Решение Майка при использовании Date
/Calendar
отлично, если вы действительно хотите придерживаться сломанного API... но я не могу преувеличивать, насколько лучше Joda...)
Ответ 2
Я использую это:
public static Date startOfDay(Date date) {
Calendar dCal = Calendar.getInstance();
dCal.setTime(date);
dCal.set(Calendar.HOUR_OF_DAY, 0);
dCal.set(Calendar.MINUTE, 0);
dCal.set(Calendar.SECOND, 0);
dCal.set(Calendar.MILLISECOND, 0);
return dCal.getTime();
}
Ответ 3
Вы должны использовать HOUR_OF_DAY вместо HOUR и объединить его с MINUTE и SECOND также.
import java.util.Calendar;
import static java.util.Calendar.HOUR_OF_DAY;
import static java.util.Calendar.MINUTE;
import static java.util.Calendar.SECOND;
import static java.util.Calendar.MILLISECOND;
public class Today {
public static void main( String [] args ) {
Calendar cal = Calendar.getInstance();
cal.set( HOUR_OF_DAY, 0 );
cal.set( MINUTE, 0 );
cal.set( SECOND, 0 );
cal.set( MILLISECOND, 0 );
System.out.println( cal.getTime() );
}
}
Результаты, которые вы получаете, связаны с тем, что HOUR используется для AM/PM, а HOUR_OF_DAY - 24 часа.
HOUR_OF_DAY:
Номер поля для get и set, указывающий час дня. HOUR_OF_DAY используется для 24-часовых часов. Например, в течение 10: 04: 15,250 PM HOUR_OF_DAY составляет 22.
ЧАС:
Номер поля для получения и установки, указывающий час утреннего или дневного времени. ЧАС используется для 12-часового такта (0 - 11). Полдень и полночь представлены 0, а не на 12. Например, в 10: 04: 15.250 PM ЧАС составляет 10.
Ответ 4
Компонент времени - это не только часы (и Calendar.HOUR, как вы заметили, AM/PM).
Вы должны установить все поля времени в 0: HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND.
Ответ 5
См. Apache commons-lang DateUtils.truncate()
Ответ 6
Как упоминалось выше, вы должны использовать
Calendar.HOUR_OF_DAY
В отличие от
Calendar.HOUR
Также вам нужно очистить остальные поля (Calendar.MINUTE
, Calendar.SECOND
и Calendar.MILLISECOND
), установив их в ноль.
Извините, здесь нет простого способа. Боль, и почему они работают над новым API для Java 7, я полагаю, основываясь на Joda Time.
Ответ 7
... или вы можете сделать это хакерским способом:
long MS_PER_DAY = 86400000L;
Date dateTime=new Date();
long offset = TimeZone.getDefault().getOffset(dateTime.getTime());
Date date= new Date(((dateTime.getTime()+offset)/MS_PER_DAY)*MS_PER_DAY-offset);
Ответ 8
Я знаю, что это очень старый вопрос, более неактивный, но он оказался на вершине, когда я искал Google.
Хотя все советы очень хорошие, я не могу поверить, что никто просто не ответил:
Date date = new Date(System.currentTimeMillis());
System.out.println(date);
Что эффективно возвращает сегодня, дата.
Ответ 9
Почему манипуляции с строкой?
Можете ли вы не просто установить нужные значения в объекте Calendar перед преобразованием в Date с помощью getTime()?
Ответ 10
Еще одно голосование за JodaTime.
java.util.Date и Календарь настолько плохи, что они сломаны. (И SimpleDateFormat тоже мусор!)
Для того, что стоит, Java 7 будет включать в себя новую библиотеку времени, основанную на JodaTime.