【发布时间】:2021-07-09 22:48:45
【问题描述】:
我正在为 android 编写应用程序。在它开始时,我创建了一个日历,填充诸如 YEAR、MONTH、DAY_OF_MONTH、ERA 和 GMT 时区等容器。
我得到这样的东西
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=java.util.SimpleTimeZone[id=GMT,offset=0,dstSavings=3600000,useDaylight=false,startYear=0,startMode=0,startMonth=0,startDay=0,startDayOfWeek=0,startTime=0,startTimeMode=0,endMode=0,endMonth=0,endDay=0,endDayOfWeek=0,endTime=0,endTimeMode=0],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=3,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=14,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
稍后我需要得到一个像“14-04-2021”这样的字符串,所以我之前使用 getTimeInMillies 为日历创建了一个日期变量。它的所有字段都被零填充。
解析 JSON 后,我需要使用日历键创建地图。看起来像这样。
String key = keys.next();
Date d = dateFormat.parse(key);
String rate = String.valueOf(rates.getJsonObject(key).get(get_curr_inf(get_curr_to_r())));
Double rate_ = Double.parseDouble(rate);
Calendar cal = new GregorianCalendar();
cal.setTime(d);
Calendar tmp = new GregorianCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
tmp.setTimeZone(TimeZone.getTimeZone("GMT"));
tmp.set(Calendar.ERA, 1);
long f = tmp.getTimeInMillis();
data.put(tmp, rate_);
我这样做的方式很奇怪,因为它需要与以前的日历完全相似,因为我使用它来解析地图。
有什么办法让它看起来更好看?
【问题讨论】:
-
我建议你不要使用
Date、DateFormat、Calendar和GregorianCalendar。这些类设计不佳且早已过时,DateFormat特别是出了名的麻烦。为了让生活更轻松,请改用LocalDate和DateTimeFormatter,两者都来自java.time, the modern Java date and time API。
标签: java android calendar java.util.calendar