2015-01-18 3 views
0

Привет всем в моей программе я получаю дату, как: 2015-01-18дата Достаньте из календаря

Это календарь объект, и мне нужно, чтобы получить день, месяц и год от объекта. Прямо сейчас я сделать что-то вроде:

int day = date.get(Calendar.DAY_OF_MONTH); 
int month = date.get(Calender.MONTH + 1); 
int year = date.get(Calender.Year); 

Выход есть:

day = 18 
month = 1 
year = 2015 

Моя проблема заключается в том, что я хочу получить месяц в этом случае, как 01, а не 1, потому что значение обрабатывается позже на моем кода и должен быть в этом формате. Является ли уродливым добавлять 0 до этого 1, так что любой код knoenter здесь лучший способ сделать это? Благодаря

+2

Вы пытались использовать 'SimpleDateFormat'? И почему вы * разбираете * значение снова в своем коде, когда вы уже получили его как 'int'? В идеале вы должны сохранить значение как тип даты/времени, чтобы начать с него, а не преобразовывать его в строку и анализировать ее обратно ... только делайте это, когда вам действительно нужно. (Я бы рекомендовал использовать Joda Time, если вы используете Java 7 или старше, и java.time, если вы используете Java 8+, а не java.util.Calendar.) –

+0

Мне нужно использовать Calendar, я не могу измените это. Я использую java 6, и я тоже не могу это изменить. После того, как я прочитал день, месяц и год, и я должен передать его другому объекту, чтобы выполнить веб-сервис, и он должен быть 01. – user2295277

+0

Ну, тогда вам нужно передать строку, а не int, и это на самом деле не «позже на моем код ", если вы передаете его веб-службе. –

ответ

2

Вы должны

int month = cal.get(Calender.MONTH) + 1; // 0..11 -> 1..12 

получить Int для месяца (+ должен быть вне аргумента).

Если вам нужна строка с ведущим нулем из этого числа, вы можете использовать TextFormat:

System.out.printf("month=%02d%n", month); 
String monthStr = String.format("%02d", month); 

Но, на самом деле вам не придется принимать маршрут через Интс, вы можете непосредственно в формате части Date в строки:

monthStr = new SimpleDateFormat("MM", Locale.ENGLISH).format(cal.getTime()); 
+1

Вы имеете в виду 'date.getTime()', учитывая, что 'date' является' Calendar', а не 'Date' –

+0

Да, correrct (и да, это довольно забавно, чтобы вызвать getTime в календаре с именем date, чтобы получить Дата" :) – eckes

2

Если вам нужно передать данные как «01» int является неправильным типом данных. Вы должны передать его как String. Вы можете форматировать дату, используя SimpleDateFormat. Таким образом, вы можете выбрать, какие элементы выбрать из даты и формата, который они должны иметь. Пример:

final Calendar calendar = Calendar.getInstance(); 
final Date date = calendar.getTime(); 
String day = new SimpleDateFormat("dd").format(date); // always 2 digits 
String month = new SimpleDateFormat("MM").format(date); // always 2 digits 
String year = new SimpleDateFormat("yyyy").format(date); // 4 digit year 

Вы также можете отформатировать полную дату, как это:

String full = new SimpleDateFormat("yyyy-MM-dd").format(date); // e.g. 2015-01-18 

JavaDoc for SimpleDateFormat полностью объясняет различные параметры форматирования. Обратите внимание, что SimpleDateFormat не является потокобезопасным.