2013-08-20 2 views
1

Я хочу изменить дату на Java. Это не проблема, но я немного смущен тем, как я должен это делать.Как мне установить дату?

1.

Calendar c = Calendar.getInstance(); 
c.set(2010,9,10,6,0); 

2.

Calendar c = Calendar.getInstance(); 
c.set(c.YEAR, 2010); 
c.set(c.MONTH, 9); 
c.set(c.DATE, 10); 
c.set(c.HOUR, 6); 
c.set(c.MINUTE, 0); 

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

+2

Код должен быть коротким * и * ясно. Так что если вы обнаружите, что № 2 чище, нет ничего плохого в этом, особенно при старте или при работе самостоятельно. –

ответ

2

Попробуйте это, но ctrl + space может помочь вам в следующий раз.

Calendar cal = Calendar.getInstance(); 
    cal.set(year, month, date, hourOfDay, minute); 

Благодаря

+0

+1 использование переменных, чтобы сделать его более ясным –

1

Единственный способ изменить дату в одной атомарной операции. Выполнение этого поля одновременно приводит к неожиданно некорректным результатам. Когда вы создаете новый Calendar, он получает инициализацию с сегодняшней датой. Предположим, сегодня 31 мая, и вы установили месяц до июня, намереваясь назначить следующий день. Когда вы устанавливаете месяц, 31 июня больше не действует, поэтому дата получает «нормализуется» до 1 июля. Затем вы устанавливаете день, но теперь месяц ошибочен.

Вы можете построить немало таких «интересных» случаев. Некоторые будут терпеть неудачу, если вы установите месяц первым, и некоторые из них потерпят неудачу, если вы установите первый день, поэтому нет порядка, который гарантированно будет работать для всех случаев. Установите дату как одну операцию.

Вот некоторые примеры:

Today   Changes    Result 
5/31/2013  MM->6, DD->12  7/12/2013 (not 6/12) 
6/01/2013  DD->31, MM->07  7/01/2013 (not 7/31) 
0

Короткий код не все время хороший способ в Java (или другом языке). Вы должны быть понятны для вас и для других разработчиков, которые хотят использовать ваш код.

Итак, на мой взгляд, вы можете использовать первый метод, но с большим количеством java-документов и комментариев, чем второй метод, который является наиболее явным (внимание: второй метод является самым явным, но ему также нужны комментарии ...).

0

Хорошо, Стефан, я думаю, вам стоит пойти на более чистый подход. Первый метод имеет только две строки кода для решения вашей проблемы. Вы должны принять его. Из моего опыта развития я узнал, что LOC (линия кода) действительно имеет значение для поддержания кода, и мы всегда должны думать о решении проблемы с минимальными строками кода. Поэтому я думаю, вы должны использовать API-интерфейс многопараметрических параметров.
Спасибо!

+0

Очень хорошее техническое объяснение Джима Гаррисона. Большой! –

+0

Да, Karthik,! но ты знаешь. Требуется 15 р. Увы! –