有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 Crutch和Java日历

我正在为安卓编写一个应用程序。在开始的时候,我创建了一个日历,将年、月、月中日、纪元和时区等容器填充为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_);                                                                                                                  

我用一种非常奇怪的方式来做,因为它需要与上一个日历完全相似,因为我使用它来解析地图

有没有办法让它看起来更好


共 (1) 个答案

  1. # 1 楼答案

    永远不要使用Calendar。多年前,这个糟糕的类被现代的java所取代。上课时间

    对于没有时间和时区的仅日期值,请使用LocalDate

    On the start of it I create a Calendar, filling such containers as YEAR, MONTH, DAY_OF_MONTH, ERA and time zone as GMT.

    LocalDate ld = LocalDate.of( 2021, Month.APRIL , 14 ) ;
    

    I need to get a string like "14-04-2021"

    DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
    String output = ld.format( f ) ;
    

    I need to create a map with Calendar keys

    Map< LocalDate , … > map = new … ;
    map.put( ld , … ) ;
    

    java。时间类内置在Android 26及更高版本中。最新的安卓工具通过API desugaring将大部分功能带到了早期的安卓系统中