当前位置: 首页 > 知识库问答 >
问题:

为什么日历值不同?

袁开宇
2023-03-14

我得根据年、月、日、时、分来数次数。(秒统一为零,我不需要秒)

我选择了HashMap作为数据结构。

HashMap<Calendar,Integer> arr_time; 
Calendar calendar = Calendar.getInstance();
calendar.set(mYear,mMonth,mDay,mHour,mMinute,0);
if(arr_time.containsKey(calendar)){
  // increase Integer value
  // ++1;
}else{
  // add new time 
  // arr_time.put(calendar,1);
}

我没有用“约会”。是因为,Android Devloper这样说。

日期(int year,int month,int Date,int hrs,int min,int sec)API级别1中不推荐使用此构造函数。从JDK 1.1版开始,由calendar.set(年+1900,month,date,hrs,min,sec)或GregorianCalendar(年+1900,month,date,hrs,min,sec)代替。

共有1个答案

冯星剑
2023-03-14

可怕的Calendar类几年前就被java.time类取代了,特别是ZonedDateTime

你忽略了时区这个关键问题。在提供时区(或offset-from-UTC)上下文之前,日期和日中时间没有真正的意义。例如,正午是欧洲/巴黎亚洲/东京的正午晚得多,比美国/蒙特利尔的正午早得多。

使用zoneddatetime类表示带有时区的日期和时间。

大陆/地区格式指定适当的时区名称,例如美国/蒙特利尔非洲/卡萨布兰卡太平洋/奥克兰。切勿使用estist等2-4个字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

如果要将秒和小数秒都设置为零,则截断为分钟。

ZonedDateTime zdt = ZonedDateTime.now( z ).truncatedTo( ChronoUnit.MINUTES ) ;  // Set the whole second and the fractional second both to zero.

如果出于计算目的,您希望只考虑带有time-of-day的日期,而忽略时区,则提取LocalDateTimelocaldatetime只是一个带有time-of-day的日期,并且缺少任何时区或偏移量-utc的概念。

LocalDateTime ldt = zdt.toLocalDateTime() ;

有了localdatetime,您就可以进行计数了。创建一个映射,其中键为LocalDateTime,值为整数

我想您会关心日期-时间键的排序顺序,所以使用sortedmaptreemap就是这样一种实现。

SortedMap< LocalDateTime , Integer > map = new TreeMap() ;

对于每个LocalDateTime,从Map中检索一个Integer对象。增加数字计数,并将旧的integer对象替换为新对象。

使用映射已经在堆栈溢出问题上讨论了数百次,如果不是数千次的话。因此,如果你需要更多的讨论和例子,请搜索。

Java.time框架内置在Java8和更高版本中。这些类取代了麻烦的旧的遗留日期-时间类,如java.util.dateCalendar、&SimpleDateFormat

要了解更多信息,请参阅Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR310。

    null
    null
  • java.time类的Android捆绑实现的更高版本。
  • 对于早期的Android(<26),ThreeTenABP项目适用于ThreeTen-Backport(上面提到)。查看如何使用ThreeTenabp…。
 类似资料:
  • 问题内容: 在中,将1月定义为第0个月,而不是第1个月。是否有任何特定原因? 我已经看到很多人对此感到困惑… 问题答案: 它只是Java日期/时间API的一团糟。列出问题所在将花费很长时间(而且我确定我不知道其中一半是问题)。诚然,处理日期和时间是很棘手的,但是无论如何都是这样。 帮个忙,改用Joda Time或JSR-310。 编辑:至于原因-如其他答案所述,这很可能是由于旧的C API引起的,

  • 我是java新手,所以请不要后悔java中的对象和东西正在传递引用的值,但下面是我试图传递对象的代码。当我通过传递到函数中更新值时,a的值没有改变。发生了什么请帮助我。。。

  • MySQL 使用通常所说的 proleptic 阳历。 每个将日历由朱利安改为阳历的国家在改变日历期间都不得不删除至少10天。 为了了解其运作,让我们看看1582年10月,这是由朱利安日历转换为阳历的第一次: 周一 周二 周三 周四 周五 周六 周日 1 2 3 4 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 在10月4日到10月15日之间

  • 问题内容: 我想使用Vim来查看结果(不在shell中)。我认为可以使用(将的结果用作的输入),但返回结果为: 有人可以解释吗? 问题答案: 通过传递到 vim中 ,您正在更改标准输入流。由于 vim 是交互式程序,因此它需要标准输入作为控制台。 如果要在vim中查看,应该告诉它您正在从stdin中读取文件(通过提供参数): 另外,您可以使用 更多 或 更少 : 后两者是优选的。如果通过管道 传送

  • 我在客户端使用vue、vue路由器,在服务器端使用express、morgan(MEVN应用程序) 在客户端我用vue cookie设置cookie 在服务器端,我使用CookieParser 所以,在应用程序。我有这样的代码 并且,在文件中,我有这样一个GET请求的代码 问题是,var loginHash=req.cookies['Login'];总是返回未定义的,即使我有登录cookie 添加

  • 今年夏天,为了学习app开发,我已经决定在Android工作室做一个闹钟,事先没有太多Java或OOP方面的知识。 我试图使用TimePickerDiaglog获取用户对警报的输入,然后将该时间存储在Calendar实用程序中,这样我就可以使用警报管理器设置一个挂起的意图。 不幸的是,我收到一个NullPointerException,这意味着我的日历设置不正确,当我与AlarmManager一起