Я - поклонник !$
, !^
и !*
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
В идеале вместо этого используйте Joda Time . Это бесконечно лучший API по сравнению со встроенным. Затем вы захотите выбрать между LocalDateTime
и DateTime
в зависимости от ваших конкретных требований (это сложная область - я не собираюсь резюмировать в одном или двух предложениях, но документы хорошо работают).
Если это абсолютно необходимо, используйте java.util.Calendar и преобразуйте его в Date
, когда вам нужно .
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();
Если вы посмотрите на 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();
Вы также можете использовать объект 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 );
}
}
Тим, в своих комментариях вы упомянули, что делаете это в контексте GXT, то есть в клиентском коде GWT. GWT не поддерживает GregorianCalendar, и вы, скорее всего, не сможете поместить JodaTime через GWTCompiler (возможно, вы сможете, но действительно ли хотите).
Я думаю, у вас действительно остается возможность использовать JNSI, если вы хотите выполнять календарные операции в GWT. См. Класс Date в JavaScript.
GregorianCalendar(year + 1900, month, date)
http://java.sun.com/j2se/1.4.2/docs/api /java/util/Date.html
К сожалению, поддержка даты в Java совершенно ужасна. Официально вам, вероятно, придется делать это с помощью Календаря, но, на мой взгляд, в этом нет необходимости. Как уже упоминалось другими, время Joda намного лучше, но все же не так просто использовать, как даты в Ruby on Rails.
Я не знаю ни одного пакета Java, который дает вам такой объем поддержки даты (Joda немного уступает, но приближается), но в Groovy использование TimeCategory дает вам очень похожую на Ruby on Rails поддержку дат.