【问题标题】:Java dates problemJava日期问题
【发布时间】:2011-04-07 15:24:37
【问题描述】:

我想问一个问题。我有一个包含日期的列表,例如:

2011 年 1 月 7 日星期五 00:00:00 CET
2011 年 1 月 7 日星期五 00:01:00 CET
2011 年 1 月 7 日星期五 00:03:00 CET
2011 年 1 月 7 日星期五 00:05:00 CET
2011 年 1 月 7 日星期五 00:06:00 CET

然后用户输入一个间隔分钟,例如:2
我必须从列表中获取 2 分钟之间的每个日期。
输出应该是这样的:

1. 2011 年 1 月 7 日星期五 00:00:00 CET 2011 年 1 月 7 日星期五 00:01:00 CET 2. 2011 年 1 月 7 日星期五 00:03:00 CET 2011 年 1 月 7 日星期五 00:05:00 CET 3. 2011 年 1 月 7 日星期五 00:06:00 CET

问题是,我不知道该怎么做。欢迎任何想法。 :)

【问题讨论】:

  • 答案取决于您所说的“2 分钟间隔”是什么意思。你的意思是 [00:00,02:00)、[02:00,04:00)、[04:00,06:00) 等(即不包括正确端点的固定间隔)还是在 2 内发生的事件分钟的事件。输入事件 00:00, 01:00, 02:00, 02:30, 02:45, 05:00, 05:10, 06:10, 07:10 的输出是什么?
  • 我的意思是 [00:00,02:00), [02:00,04:00), [04:00,06:00)],例如。输入:00:00、01:00、02:00、02:30、02:45、05:00、05:10、06:10、07:10 间隔:2 分钟输出:1. 00:00、01 :00, 02:00 2. 02:30, 02:45 3. 05:00, 05:10, 06:10 4. 07:10
  • “我想问一个问题。”是的,这是什么?请注意,“问题是,我不知道该怎么做。”不是一个问题。

标签: java datetime date


【解决方案1】:

编辑基于您的 cmets: 按日期排序。从最低日期开始,在间隔内添加任何日期。然后移动到不属于间隔的下一个最低日期并重复直到列表为空。

【讨论】:

  • 是的,我已经弄清楚了,但我不知道如何移动到下一个最低日期,但我正在努力。 :)
  • @Norbert 你需要dates comparator(google it),并将日期存储在List<Date> 上,将使用这个比较器进行排序
  • 是的,实际上我将这些日期存储在 List 中。
【解决方案2】:

将日期转换为时间戳,然后将它们(没有余数)除以间隔。所有具有相同结果的日期都属于同一块。

/* Psydo Code */

int offset = firstTime.getTimeStamp() / intervallInMilliSec;
int max = lastTime.getTimeStamp() / intervallInMilliSec;
SortedSet<Date>[] result = new SortedSet<Date>[max - offset];
    for(int i = 0; i < max - offset] result[i] = new SortedSet<Date>();
for(Date time : fromFile) {
  result[(time.getTimeStamp() / intervallInMilliSec) - offset].add(time);
}

【讨论】:

  • 如果您采用这种方法,请务必使用具有保证迭代顺序的Collection 类,以便当您将Date 对象从Collection 中拉出时,它们将在一些已知的顺序(最好按照添加顺序),以便您可以按正确的顺序显示它们。
  • @QuantumMechanic:你是说 Set 吗? -- 应该是 List 或 Sorted Set- 正确的。
  • 请注意:当涉及到默认比较器时,日期对象具有自然的时间顺序:)
【解决方案3】:

我强烈建议使用 Joda Time 库来处理这类事情:

http://joda-time.sourceforge.net/

内置的 Java 类很难使用 - 您将不断地将事物转换为 long,进行数学运算,然后必须转换回各种 Date 和 Calendar 对象。乔达负责所有这些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-02
    • 2018-08-24
    • 2014-11-28
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    相关资源
    最近更新 更多