如何将Gregorian string转换成Gregorian Calendar?

我必须根据日历的日期计算一些东西,但我收到完整的阳历日历的字符串值。

例如,i / p接收{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]

我想提取日历的日期值来处理进一步的计算。

其他答案太复杂或错误。 以下内容将为您提供自纪元以来毫秒数 ,这是一个通用时间戳,您可以轻松转换为大多数时间表示类,包括CalendarDate

 Pattern gregorianPattern = Pattern.compile("^java.util.GregorianCalendar\\[time=(\\d+).*"); Matcher matcher = gregorianPattern.matcher(param); if(matcher.matches()) { return Long.parseLong(matcher.group(1)); } 

您可以在输入字符串中找到时间并将其转换为公历。 然后,您必须按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); 
 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获取日期的方法。 我希望这对你有所帮助

添加更多内容,您可以使用该格式检索所需的任何信息。 这只是提供正确格式的问题。

例如:
添加z或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 

在此HH表示24小时格式的小时数mm ss秒sss毫秒。