How to convert Gregorian string to Gregorian Calendar?

自闭症网瘾萝莉.ら 提交于 2019-11-29 11:40:01

Other answers are too complicated or wrong. The following will give you the milliseconds since the epoch, which is a universal timestamp that you can easily convert to most time representation classes, including Calendar or Date:

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

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

You could find the time in the input string and convert it to a Gregorian Calendar. Then you would have to set its timezone as specified in the ZoneInfo field. Something like this might work:

    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);

or you can use a regular expression to do it, instead

    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);

Note: if you just want the calendar's Date value, you can construct it from the timeInMillis, without having to reconstruct the whole GregorianCalendar object (and without having to find the timezone if you don't want to).

    Date date=new Date(timeInMillis);
Ashay Patil
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));

This is way to grab date from GregorianCalendar. i wish this will help to you

Adding more to this, you can retrieve any information you want using the format. It's just a matter of providing the correct format.

Ex:
Adding z or Z provides you with the timezone information

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

Adding a 'T' would result in something like this:

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

In this HH represents hours in 24 hour format mm minutes ss seconds sss milliseconds.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!