我是初学者,正在研究java中的android开发。我有一个列表,其日期和时间为String
格式dd/MM/yyyy hh:mm X
,其中MM可以是一位数字或两位数字,X可以是任何int.I已经尝试了一切来解决这个问题。你可以用代码帮助我吗?
我的字符串的一些示例是:
"02/08/2017 13:00 198"
"02/7/2018 08:00 75"
"04/12/2014 19:00 5"
答案 0 :(得分:0)
我认为最简单的解决方案之一是通过确保当MM是单个数字然后我们将0添加到MM之前来统一格式。然后你可以按常规排序对它们进行排序。
您可以使用以下方式确保正确的格式:
String unify(String s) {
if (s.charAt(4) != '/') {
return s;
}
return s.substring(0, 3) + "0" + s.substring(3);
}
答案 1 :(得分:0)
可以使用自定义比较器对字符串进行排序,如a comment中提到的haaawk(可能在答案中很快)。这意味着每次比较两个字符串时解析字符串,如果你有很多字符串,这可能是一个明显的浪费。相反,我建议一个包含字符串和解析日期时间的自定义类。
public class StringWithDateTime implements Comparable<StringWithDateTime> {
private static final DateTimeFormatter FORMATTER
= DateTimeFormatter.ofPattern("dd/M/uuuu HH:mm");
private String dateTimeAndInt;
/**
* (Premature?) optimization: the dateTime from the string
* to avoid parsing over and over
*/
private LocalDateTime dateTime;
public StringWithDateTime(String dateTimeAndInt) {
this.dateTimeAndInt = dateTimeAndInt;
// parse the date-time from the beginning of the string
dateTime = LocalDateTime.from(
FORMATTER.parse(dateTimeAndInt, new ParsePosition(0)));
}
@Override
public int compareTo(StringWithDateTime other) {
return dateTime.compareTo(other.dateTime);
}
@Override
public String toString() {
return dateTimeAndInt;
}
}
通过这门课你可以做例如
List<StringWithDateTime> listWithDateTimes = Arrays.asList(
new StringWithDateTime("02/08/2017 13:00 198"),
new StringWithDateTime("02/7/2018 08:00 75"),
new StringWithDateTime("04/12/2014 19:00 5")
);
Collections.sort(listWithDateTimes);
listWithDateTimes.forEach(System.out::println);
摘录的输出是按时间顺序排列的原始字符串:
04/12/2014 19:00 5
02/08/2017 13:00 198
02/7/2018 08:00 75
继续以这种方式排序更多字符串。
使用DateTimeFormatter
,格式模式字符串中的MM
始终需要2个数字的月份,而M
个月将匹配1位和2位数月份。格式的不同变体。
问题:您正在使用java.time
,现代Java日期和时间API - 这可以在我的Android设备上运行吗?
会的。新的API称为JSR-310。要在Android上使用它,请获取ThreeTenABP JSR-310的Android后端(来自Java 8)。 this question: How to use ThreeTenABP in Android Project中的更多解释。
对于任何阅读的人(以及针对Android以外的其他人进行编程),{8}内置了java.time
。您可以在Java 6和7到ThreeTen Backport中使用它。
问题;为何选择外部图书馆? Android内置了SimpleDateFormat
吗?
现代API 所以更好用,而SimpleDateFormat
尤其令人烦恼。相反,我建议您今天开始使用面向未来的API。