你如何比较"周五下午2:00"反对"周四下午4:00"在Java?
输入数组: 星期五下午2点 周四凌晨2:00 周六下午4:00
输出: 周四凌晨2:00 星期五下午2点 周六下午4:00
答案 0 :(得分:0)
我的解决方案是建立一个代表时代的小班。我们可以将其称为TimeOfWeek
或WeeklyRecurringEvent
或适合您的域名,请尽量明智地选择。该类将有两个实例字段,工作日为DayOfWeek
,时间为LocalTime
。 DayOfWeek
和LocalTime
位于java.time
中(在Java 8中引入并向后移植到Java 6和7)。我的类将有一个构造函数接受String
参数,如"Friday 2:00 PM"
,并将其解析为两个实例字段。我相信两者都可以使用相同的DateTimeFormatter
,因此这可以是类常量(私有静态最终字段)。 DayOfWeek
没有parse
方法,因此您需要DayOfWeek.from(yourDateTimeFormatter.parse(yourString))
之类的内容。
您的课程应该实施Comparable
,以便您可以按自然顺序对对象进行排序。在compareTo
方法比较第一周的日期,然后是天数相同的时间。 DayOfWeek
从周一到周日自然排序;如果你的星期在星期一的另一天开始,你将需要特别处理它。
你的班级也可以有ZoneId
字段用于时区,但假设你所有的时间都在同一时区,那么可能没有理由。
快乐的编码。
您可能还会看到是否可以在某处找到符合您要求的课程;使用你的搜索引擎。我不知道一个,但你永远无法分辨。
java.time
中的课程通常适用于有关日期和时间的有趣要求。你显然可以没有时间或没有约会的时间。你可以有一年中的一天没有一年(有利于记住你的周年纪念日),并提到一周中没有一周的日子等等。不幸的是,没有一个课程可以完全符合您对星期几和时间的要求,这就是为什么我建议将两个现有课程组合在一起。
编辑:您的Stack Overflow个人资料似乎可能是Android程序员?如果你想在Android上使用java.time
类,可以使用the ThreeTenABP(这些类首先在JSR-310中描述,因此对于JSR-310来说是ThreeTen,对于Android Backport来说是ABP)。