在java中将日历字符串转换为日历对象

我不想将字符串Calendar Object(calendar.toString())转换为日历对象。 我试过这个解决方案,但它在控制台中显示'12 -05-2017'的日期而不是'02 -02-2017'

字符串日历对象格式:

java.util.GregorianCalendar中[时间= 1485993600000,areFieldsSet =真,areAllFieldsSet =真,宽大=真,区= sun.util.calendar.ZoneInfo [ID = “非洲/卡萨布兰卡”,偏移= 0,dstSavings = 3600000,useDaylight =真,过渡= 102,lastRule = java.util.SimpleTimeZone中[ID =非洲/卡萨布兰卡,偏移= 0,dstSavings = 3600000,useDaylight =真,startYear = 0,STARTMODE = 2,startMonth = 2,朝九特派= -1,startDayOfWeek = 1,开始时间= 7200000,startTimeMode = 0,endMode = 2,endMonth = 9,endday指定= -1,一个endDayOfWeek = 1,结束时间= 10800000,endTimeMode = 0]],Firstdayofweek可= 2,minimalDaysInFirstWeek = 4,ERA = 1, YEAR = 2017,月= 1,WEEK_OF_YEAR = 5,WEEK_OF_MONTH = 1,DAY_OF_MONTH = 2,DAY_OF_YEAR = 33,DAY_OF_WEEK = 5,DAY_OF_WEEK_IN_MONTH = 1,AM_PM = 0,HOUR = 0,HOUR_OF_DAY = 0,MINUTE = 0,SECOND = 0,微差= 0,ZONE_OFFSET = 0,DST_OFFSET = 0]

             Calendar calendar = GregorianCalendar.getInstance();
             calendar.setTime(new Date("2017/02/02"));
             System.out.println("calendar : "+calendar.getTime());
             try {
                 GregorianCalendar gc = new GregorianCalendar();
                 DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
                 System.out.println("calendar : "+calendar.getTime());
                 gc.setTimeZone(TimeZone.getTimeZone(calendar.toString()));
                 System.out.println("tme zone : "+gc.getTimeZone());
                 System.out.println("calendar : "+calendar.getTime());
                 System.out.println("calendar : "+calendar.toString());
                 System.out.println(formatter.format(gc.getTime()));
             }
             catch(Exception e) {
                 //If exception, return server TimeStamp
             }

请任何帮助


如果那是我,我会看看CalendarGregorianCalendar所有setter,看看我是否能够从字符串中提取setters所需的值。 “time = 1485993600000”应该给你最重要的信息和时间,你可以将它提供给setTimeInMillis() 。 你应该能够从“非洲/卡萨布兰卡”中获得一个时区。 等等。 您可以使用正则表达式从字符串中提取字段。

你可能不得不忍受不覆盖所有情况。 您的特定GregorianCalendar似乎包含一个sun.util.calendar.ZoneInfo和一个java.util.SimpleTimeZone ; 我不知道这是否总是如此,还有其他的可能性。

对你的尝试进行严格的测试很简单:只需在新构建的实例上再次调用toString()并查看是否得到相同的字符串。 如果你接受一些差异,并且你需要确定实际差异是否在你决定接受的范围内,那么困难就来了。

或者真的,如果我能避免它,我不想打扰。 我会看看我能否找到一个更容易的任务或更简单的方法来获得你真正想要获得的东西。 正如我在评论中所说的,可以使用java.time.LocalDate而不是GregorianCalendarLocalDate.parse()将随时解析来自LocalDate.toString()的字符串,并解决问题。 只是举一个看另一种方式的例子。


在你的代码中,你有两个独立的GregorianCalendar对象 - 一个叫做calendar ,一个叫做gc 。 您将一个日历对象设置为所需日期,然后打印另一个日历对象。


感谢@Ole,我终于找到了解决方案,它的工作原理。

             Calendar calendar = Calendar.getInstance();;
             calendar.setTime(new Date("2017/02/02"));
             String[] ds = calendar.toString().split("=");
             String[] ds2 = ds[1].split(",");
             try {
                 Calendar cal = Calendar.getInstance();;
                 DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
                 cal.setTimeInMillis(Long.valueOf(ds2[0]));
                 System.out.println(formatter.format(cal.getTime()));
             }
             catch(Exception e) {

             }
链接地址: http://www.djcxy.com/p/36645.html

上一篇: Convert calendar String to Calendar Object in java

下一篇: Compare two dates