2013-08-09 3 views
-4

У меня есть сценарий, какПолучить дату/месяц от общего количества дней в год- Java

"DAY 316 OF YEAR 1998". 

как я могу получить точную дату и месяц с выше входом? Есть идеи?

В Java, как я могу достичь этого? Пожалуйста помоги.

+2

Что '98' год? На основании какого Календаря? – MadProgrammer

+1

Похоже, домашнее задание. Что вы пробовали? Кроме того, 98 = 1998 или 2098? –

+1

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html –

ответ

2

Вы должны сначала сказать, является ли год 1998 или 2098, или что-то еще.

Кроме того, вы можете достичь того, что хотите, используя API календаря. Константы интерес являются:

Создать экземпляр календаря, используя Calendar.getInstance(TimeZone). Установите YEAR (1998 или 2098, что угодно) и DAY_OF_YEAR (316) с использованием вышеупомянутых констант и Calendar#set(field, value).

0

Я не уверен, если есть лучший способ, но то, что вы могли бы попробовать это использовать следующую строку кода:

Calendar mycal = new GregorianCalendar(1998, Calendar.JANUARY, 1); 
int daysInMonth = mycal.getActualMaximum(Calendar.DAY_OF_MONTH); 

Это возвращает количество дней месяца вы ввода. Переход с января до декабря (увеличение/изменение вашего mycal) и вычесть все из вашего дневного номера, пока у вас не будет отрицательного числа. Это будет ваш месяц.

0

Попробуйте что-то вроде этого, используя Calender: -

Date d; 
Calendar c= Calendar.getInstance(); 
c.setTime(date); 
int year = c.get(Calendar.YEAR); 
int month = c.get(Calendar.MONTH); 
int day = c.get(Calendar.DAY_OF_MONTH); 
+0

Действительно? Так что, учитывая год и день года, это сработает;) – MadProgrammer

+0

Нет, это не так. Я предположил, что дата d; будет дата, предоставленная пользователем !!! Хотя я получил вашу точку;) –

0

Используйте Regexps извлечь нужные данные из этой строки и использовать класс Date/календарь, чтобы указать на тот момент. Я думаю, это домашнее задание, поэтому я не буду давать вам никаких фрагментов кода, вы должны сами это решить.

2
  1. Анализировать вы струна, чтобы получить два числа: день года и год
  2. Создать календарь с указаного года и 1-й день года, как день года
  3. Установить указанный день года
  4. Читать дату и месяц параметры из этого обновленного календаря
+0

* «Разбор строки, чтобы получить два номера: день года и год» * ... Почему? ['SimpleDateFormat'] (http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) может анализировать' String' - FYI - я предполагаю, что вы имеете в виду 'String' разбор;) – MadProgrammer

3

Существует несколько способов, которыми вы могли бы достичь этого, исходя из того, что у вас есть.

Например. На основе String в вашем примере, вы могли бы использовать SimpleDateFormat, чтобы просто разобрать String обратно к Date объекта, который, вероятно, самое простое решение, я могу думать ...

try { 
    String value = "DAY 316 OF YEAR 1998"; 
    SimpleDateFormat sdf = new SimpleDateFormat("'DAY' DDD 'OF YEAR' yyyy"); 
    Date date = sdf.parse(value); 

    System.out.println(date); 
} catch (ParseException exp) { 
    exp.printStackTrace(); 
} 

После того, как у вас есть Date объект , вы можете использовать Calendar для извлечения различных частей объекта Date или просто использовать другое DateFormat для форматирования значения ...

Calendar cal = Calendar.getInstance(); 
cal.setTime(date); 

System.out.println("Day of Month = " + cal.get(Calendar.DATE)); 
// Note, MONTH is 0 indexed... 
System.out.println("Month = " + (cal.get(Calendar.MONTH) + 1)); 

System.out.println("Formatted = " + DateFormat.getDateInstance().format(date)); 

Таким образом, вы должны закончить с, что-то вроде ...

Day of Month = 12 
Month = 11 
Formatted = 12/11/1998 
Смежные вопросы