2014-09-12 4 views
3

Мне нужно вычислить что-то, основанное на дате календаря, но я получаю полное значение Gregorian Calendar String.Как преобразовать григорианскую строку в григорианский календарь?

Например, я/р получил {may be - "new GregorianCalendar().toString()"} as String :- java.util.GregorianCalendar[time=1410521241348,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/London",offset=0,dstSavings=3600000,useDaylight=true,transitions=242,lastRule=java.util.SimpleTimeZone[id=Europe/London,offset=0,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=8,WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=255,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=27,SECOND=21,MILLISECOND=348,ZONE_OFFSET=0,DST_OFFSET=3600000]

Я хочу, чтобы извлечь значение даты календаря для обработки дальнейших вычислений.

+0

Вы не можете таким образом. Вы можете взять 'String' как' Json' 'String'. –

+0

@DeiAndrei 'GregorianCalendar' Объект не является простым, а также читать http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#toString%28%29 –

+0

Я пропустил вопрос , мои извинения. – DeiAndrei

ответ

1

Другие ответы слишком сложны или неправильны. Следующие даст вам миллисекунд с начала эпохи, которая является универсальной метки времени, что вы можете легко конвертировать в большинстве классов времени представления, в том числе Calendar или Date:

Pattern gregorianPattern = Pattern.compile("^java.util.GregorianCalendar\\[time=(\\d+).*"); 

Matcher matcher = gregorianPattern.matcher(param); 
if(matcher.matches()) { 
    return Long.parseLong(matcher.group(1)); 
} 
+0

Спасибо, друг! Очень сжатое решение. Это то, что я искал 1 год назад :-) – 53by97

3

Вы можете найти время во входной строке и преобразовать ее в григорианский календарь. Затем вам нужно будет установить свой часовой пояс, как указано в поле ZoneInfo. Нечто подобное может работать:

String calendarAsString="java.util.GregorianCalendar[time=1410521241348,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"Europe/London\",offset=0,dstSavings=3600000,useDaylight=true,transitions=242,lastRule=java.util.SimpleTimeZone[id=Europe/London,offset=0,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=8,WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=255,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=27,SECOND=21,MILLISECOND=348,ZONE_OFFSET=0,DST_OFFSET=3600000]"; 

    int timeStart=calendarAsString.indexOf("time=")+5; 
    int timeEnd=calendarAsString.indexOf(','); 
    String timeStr=calendarAsString.substring(timeStart, timeEnd); 
    long timeInMillis=Long.parseLong(timeStr); 

    int timezoneIdStart=calendarAsString.indexOf("\"")+1; 
    int timezoneIdEnd=calendarAsString.indexOf("\","); 
    String timeZoneStr=calendarAsString.substring(timezoneIdStart, timezoneIdEnd); 

    System.out.println("time="+timeInMillis+" zone="+timeZoneStr); 
    Calendar calendar=Calendar.getInstance(TimeZone.getTimeZone(timeZoneStr)); 
    calendar.setTimeInMillis(timeInMillis); 

    System.out.println(calendarAsString); 
    System.out.println(calendar); 

или вы можете использовать регулярные выражения, чтобы сделать это, вместо того, чтобы

String regex="time=([0-9]*),.*ZoneInfo\\[id=\"([^\"]*)\""; 
    Pattern pattern=Pattern.compile(regex); 
    Matcher matcher=pattern.matcher(calendarAsString); 
    matcher.find(); 
    timeStr=matcher.group(1); 
    timeInMillis=Long.parseLong(timeStr); 
    timeZoneStr=matcher.group(2); 
    System.out.println("time="+timeInMillis+" zone="+timeZoneStr); 
    calendar=Calendar.getInstance(TimeZone.getTimeZone(timeZoneStr)); 
    calendar.setTimeInMillis(timeInMillis); 
    System.out.println(calendar); 

Примечание: если вы просто хотите даты значение этого календаря, вы можете построить его из timeInMillis , без необходимости реконструировать весь объект GregorianCalendar (и без необходимости находить часовой пояс, если вы этого не хотите).

Date date=new Date(timeInMillis); 
-1
GregorianCalendar g=new GregorianCalendar(1975, 5, 7); 
    Date d=g.getTime(); 
    System.out.println(g.toString()); 
    SimpleDateFormat formatter=new SimpleDateFormat("yyyy MM dd"); 
    System.out.println(formatter.format(d)); 

Это способ захватить дату из GregorianCalendar. Я хочу, чтобы это вам помогло.

Добавляя больше к этому, вы можете получить любую информацию, которую хотите, используя формат. Это всего лишь вопрос обеспечения правильного формата.

Ex:
Добавление г или Z предоставляет информацию о временных зон

"yyyy MM dd z" - 2014 10 12 PDT 
"yyyy MM dd Z" - 2014 10 12 -0700 

Добавление 'T' приведет к чему-то вроде этого:

"yyyy-MM-dd'T'HH:mm:ss.sssZ" - 2014-10-12T14:23:51.890+0530 

В этом ДХ представляет часы в 24-часовой формат мм мин. Ss секунд sss миллисекунды.

+0

. Это ответ оригинальный вопрос? – Atul

+0

Это не объясняет, как получить дату из исходной строки ввода, описанной в вопросе –

Смежные вопросы