При получении сегодняшней даты в Java - я попробовал регулярные пути

Единственная модификация, которую вам нужно сделать - это вернуть данные из 1-й функции, которая требуется для 2-й функции. Шаговая функция автоматически получит выход первой функции в качестве входа 2-й функции.

Кроме того, вам не нужно обрабатывать вызовы функций между лямбда-функциями, конечный автомат будет обрабатывать это.

Кроме того, за услугу не будет взиматься дополнительная плата, кроме стоимости лямбда-выполнения, поэтому ваши затраты остаются такими же.

14
задан Bill the Lizard 6 May 2009 в 13:49
поделиться

9 ответов

My standard advice for Java date/time questions: don't use java.util.{Calendar,Date}. Use Joda Time. That way you can represent a date as a date (with no associated time zone), instead of a date/time. Or you could use a DateMidnight if that's what you want to represent. (Be careful of combinations of time zone and date where there is no midnight though...)

What do you need to use the Date with? If you can get away with changing to use Joda throughout, that's great. Otherwise, you can use Joda to do what you want and then convert to milliseconds (and then to java.util.Date) when you really need to.

(Michael's solution when using Date/Calendar is fine if you really want to stick within a broken API... but I can't overstate how much better Joda is...)

18
ответ дан 1 December 2019 в 05:53
поделиться

I use this:

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();
 }
25
ответ дан 1 December 2019 в 05:53
поделиться

Вы должны использовать 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:

Номер поля для получения и установки с указанием часа дня. HOUR_OF_DAY используется для 24-часовых часов. Например, в 10: 04: 15.250 PM HOUR_OF_DAY равен 22.

HOUR:

Номер поля для получения и установки, указывающий час утра или дня. ЧАС используется для 12-часовых часов (0 - 11). Полдень и полночь представлены 0, а не 12. Например, в 10: 04: 15.250 PM ЧАС - 10.

10
ответ дан 1 December 2019 в 05:53
поделиться

The time component is not just hours (and Calendar.HOUR is, as you have noticed, AM/PM). You need to set all of the time fields to 0: HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND.

9
ответ дан 1 December 2019 в 05:53
поделиться

See Apache's commons-lang DateUtils.truncate()

4
ответ дан 1 December 2019 в 05:53
поделиться

Another vote for JodaTime.

java.util.Date and Calendar are so bad they are broken. (And SimpleDateFormat is rubbish too!)

For what it's worth, Java 7 will include a new date time library based strongly around JodaTime.

0
ответ дан 1 December 2019 в 05:53
поделиться

Why the string manipulation?

Can you not just set the values you need on the Calendar object before converting to a Date using getTime()?

0
ответ дан 1 December 2019 в 05:53
поделиться

Как упоминалось выше, вы должны использовать

Calendar.HOUR_OF_DAY

В отличие от

Calendar.HOUR

Также вам нужно очистить другие поля ( Calendar.MINUTE , Calendar.SECOND и Calendar.MILLISECOND ), установив их в ноль.

К сожалению, здесь нет простого способа. Боль, и именно поэтому они работают над новым API для Java 7, который, я считаю, основан на Joda Time.

1
ответ дан 1 December 2019 в 05:53
поделиться

... или вы можете сделать это хакерским способом:

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);
1
ответ дан 1 December 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: