Параметризованные конструкторы java.util. Класс даты удерживается от использования. Какова альтернатива?

Я - поклонник !$, !^ и !* expandos, возврат, из новой отправленной командной строки: последний объект, сначала не управляйте объектом и всеми объектами некоманды. К остроумию (Отмечают, что оболочка распечатывает команду сначала):

$ echo foo bar baz
foo bar baz
$ echo bang-dollar: !$ bang-hat: !^ bang-star: !*
echo bang-dollar: baz bang-hat: foo bang-star: foo bar baz
bang-dollar: baz bang-hat: foo bang-star: foo bar baz

Это пригождается, когда Вы, говорят ls filea fileb, и хотят отредактировать один из них: vi !$ или они оба: vimdiff !*. Это может также быть обобщено к "n th аргумент" как так:

$ echo foo bar baz
$ echo !:2
echo bar
bar

Наконец, с путями, можно достигнуть части пути путем добавления :h и :t к любому вышеупомянутому expandos:

$ ls /usr/bin/id
/usr/bin/id
$ echo Head: !$:h  Tail: !$:t
echo Head: /usr/bin Tail: id
Head: /usr/bin Tail: id
26
задан Tiny 7 October 2014 в 21:36
поделиться

7 ответов

В идеале вместо этого используйте Joda Time . Это бесконечно лучший API по сравнению со встроенным. Затем вы захотите выбрать между LocalDateTime и DateTime в зависимости от ваших конкретных требований (это сложная область - я не собираюсь резюмировать в одном или двух предложениях, но документы хорошо работают).

Если это абсолютно необходимо, используйте java.util.Calendar и преобразуйте его в Date , когда вам нужно .

26
ответ дан 28 November 2019 в 06:13
поделиться

Календарь!

Calendar cal = Calendar.getInstance();
cal.set(2009, Calendar.DECEMBER, 12);

Обратите внимание, что я не указал 12 для декабря, потому что на самом деле это 11 (январь 0).

Затем вы можете добавить или удалить секунды, минуты, часы , дни, месяцы или год легко с:

cal.add(Calendar.HOUR, 2);
cal.add(Calendar.MONTH, -5);

И, наконец, если вам нужна дата:

cal.getTime();
25
ответ дан 28 November 2019 в 06:13
поделиться

Если вы посмотрите на Javadoc , он указывает на использование Календаря .

Начиная с версии 1.1 JDK, замененного Calendar.set ( год + 1900, месяц, date, hrs, min) или GregorianCalendar (год + 1900, месяц, число, часы, min).

Если вы посмотрите на параметры конструктора Date , то увидите, почему он устарел:

Параметры:

 год - год минус 1900.
month - месяц от 0 до 11.
date - день месяца между 1-31.
hrs - часы с 0 до 23.
min - минуты от 0 до 59.

год - это не то, что вы ожидаете, как и месяц .

Чтобы представить дату, которую вы упомянули, вам нужно позвонить Date следующим образом (не рекомендуется)

new Date(2009-1900, 12-1, 9)

Альтернативный вариант использования Calendar :

Calendar cal = Calendar.getInstance();
cal.set(2009, 11, 9); //year is as expected, month is zero based, date is as expected
Date dt = cal.getTime();
17
ответ дан 28 November 2019 в 06:13
поделиться

Вы также можете использовать объект SimpleDateFormat :

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


public class DateTest {
    public static void main( String [] args ) throws ParseException {
        SimpleDateFormat sdf =  new SimpleDateFormat("yyyy, MM, dd");
        Date date = sdf.parse("2009, 12, 9");
        System.out.println( date );
    }
}
8
ответ дан 28 November 2019 в 06:13
поделиться

Тим, в своих комментариях вы упомянули, что делаете это в контексте GXT, то есть в клиентском коде GWT. GWT не поддерживает GregorianCalendar, и вы, скорее всего, не сможете поместить JodaTime через GWTCompiler (возможно, вы сможете, но действительно ли хотите).

Я думаю, у вас действительно остается возможность использовать JNSI, если вы хотите выполнять календарные операции в GWT. См. Класс Date в JavaScript.

4
ответ дан 28 November 2019 в 06:13
поделиться
GregorianCalendar(year + 1900, month, date)

http://java.sun.com/j2se/1.4.2/docs/api /java/util/Date.html

2
ответ дан 28 November 2019 в 06:13
поделиться

К сожалению, поддержка даты в Java совершенно ужасна. Официально вам, вероятно, придется делать это с помощью Календаря, но, на мой взгляд, в этом нет необходимости. Как уже упоминалось другими, время Joda намного лучше, но все же не так просто использовать, как даты в Ruby on Rails.

Я не знаю ни одного пакета Java, который дает вам такой объем поддержки даты (Joda немного уступает, но приближается), но в Groovy использование TimeCategory дает вам очень похожую на Ruby on Rails поддержку дат.

2
ответ дан 28 November 2019 в 06:13
поделиться
Другие вопросы по тегам:

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