我有以下格式的一天。
"Fri 05:00"
"Tue 10:15"
"Mon 02:00"
我想对从星期一到星期日开始的这一天进行排序。
我尝试将日期格式设置为
SimpleDateFormat format = new SimpleDateFormat("EEE hh:mm");
然后,我创建了这些日期的列表。然后,我在比较器中使用了Calendar.DAY_OF_WEEK,但是它是根据从星期日而不是星期一开始的日期排序的。
答案 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
或现在很旧的相关可怕的日期时间类,例如Date
或Calendar
。仅将 java.time 类用于日期时间工作。
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance 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中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。
答案 1 :(得分:0)
日历具有方法
setFirstDayOfWeek(ind day)
您可以使用它:calendar.setFirstDayOfWeek(Calendar.Monday)