用Java按星期一至星期几的星期几排序

时间:2019-02-05 10:56:49

标签: java sorting comparator

我有以下格式的一天。

"Fri 05:00"
"Tue 10:15"
"Mon 02:00"

我想对从星期一到星期日开始的这一天进行排序。

我尝试将日期格式设置为

SimpleDateFormat format = new SimpleDateFormat("EEE hh:mm");

然后,我创建了这些日期的列表。然后,我在比较器中使用了Calendar.DAY_OF_WEEK,但是它是根据从星期日而不是星期一开始的日期排序的。

2 个答案:

答案 0 :(得分:1)

定义课程

没有与Java捆绑在一起的类来表示一周中的某天和一天中的某天。捆绑的班级需要一个日期。

您将需要定义自己的此类,也许名为DayOfWeekWithTime。该类将具有两个成员字段,一个DayOfWeek对象和一个LocalTime对象。在Stack Overflow中搜索有关这些类的许多现有帖子。

public class DayOfWeekWithTime {
    // Member fields
    DayOfWeek dayOfWeek ;
    LocalTime localTime ;

    // Constructor
    public DayOfWeekWithTime ( DayOfWeek dayOfWeek , LocalTime localTime ) {
        Objects.requireNonNull( dayOfWeek ) ;
        Objects.requireNonNull( localTime ) ;
        this.dayOfWeek = dayOfWeek ;
        this.localTime = localTime ;
    }
}

DayOfWeek枚举遵循ISO 8601标准,因此一周定义为星期一至星期日。这符合您所需的排序顺序。因此,您可以通过该成员字段对DayOfWeekWithTime对象的集合进行排序。参见Collections.sort( list , comparator )。在Stack Stack Overflow上搜索有关按特定字段对对象排序的主题的许多现有文章。

要从字符串输入中实例化DayOfWeekWithTime对象(如“问题”所示),请在SPACE字符上拆分。参见String::split。在Stack Overflow中搜索有关拆分字符串主题的许多现有文章。

然后编写一个例程,为每个3字母输入值查找一个DayOfWeek枚举。您可以编写一个if-else-if系列。或者,您可以编写Map< String , DayOfWeek >

对于一天中的时间,您可以使用LocalTime.parse方法进行解析。如果使用24小时制,且在单个数字上填充零,则无需定义格式设置模式,因为 java.time 类在解析/生成文本时默认使用标准ISO 8601格式。在Stack Overflow上搜索有关使用 java.time 类进行解析的许多现有文章。

不要使用SimpleDateFormat或现在很旧的相关可怕的日期时间类,例如DateCalendar。仅将 java.time 类用于日期时间工作。


关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

答案 1 :(得分:0)

日历具有方法

setFirstDayOfWeek(ind day)

您可以使用它:calendar.setFirstDayOfWeek(Calendar.Monday)