【问题标题】:What is the best way to tell if a collection of dates is monthly or daily?判断日期集合是每月还是每天的最佳方法是什么?
【发布时间】:2012-01-09 11:35:00
【问题描述】:

我想知道给定 Date 对象的 TreeSet 来判断这些日期是每天还是每月的最佳方法是什么。请注意,每日日期集将没有周末或银行假日的日期。每月日期集将具有月末日期。这组日期将跨越几年。

我目前能想到的唯一方法是从集合中取出前 12 个日期并检查每个日期的月份。如果连续发现一个月不止一次,那么这很可能是一组每日日期。如果不是,则可以假定它是一组每月日期。

虽然这看起来应该可以工作(我想不出它会错过任何边缘情况)我想知道是否有更优雅的解决方案?我会想象某种数据结构(树?),它使用基于月份和年份的比较器。然后,如果该集合的子树包含多个节点,那么我可以假设它们是每日日期。我不确定这种方式是否可以保证额外的代码,或者是否有更好的解决方案可用。感谢您能给我的任何帮助。

【问题讨论】:

  • 是什么阻止您在创建它们时识别它们?
  • 这是对现有功能的更新,因此实际上没有机会修改大部分代码。此外,这些日期最初来自我们计划之外的来源。

标签: java date


【解决方案1】:

我目前能想到的唯一方法是从集合中取出前 12 个日期并检查每个日期的月份。如果连续发现一个月不止一次,那么这很可能是一组每日日期。如果不是,则可以假定它是一组每月日期。

这不一定有效。

您可能必须检查集合中的每个日期,以确定该日期是工作日还是月末日...或两者兼有!!

当您发现工作日不是月末日时,您可以停下来,或者反之亦然,但防御程序会检查所有这些,以防万一输入错误。

您不会从集合是TreeSet这一事实中获得任何性能优势。

【讨论】:

  • 感谢您的快速回复。不敢相信我忽略了这一点!因此,正如您所说,我认为解决方案是确定是否有连续的日期,同时考虑到本月可能已经结束的周末和月末。我想也有可能由于其他原因(它来自我们系统之外的自动来源)丢失了一天的数据。这变得相当棘手!
  • 如果此数据来自您无法控制的来源并且对数据质量存在疑问,那么您需要彻底检查不良数据。无论如何,彻底的性能成本可能无关紧要。代码“优雅”可以是一种奢侈。简单通常更物有所值。
  • 是的。我会记住的,谢谢。当我获得足够的声望点时,我会投票给答案。
猜你喜欢
  • 2020-03-23
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多