我在Strings中有两种日期格式,即:
1981年12月7日 和 1991年7月11日
String one_date = "1981-12-07";
String another_date = "07-11-1991";
我需要以一种格式转换它们。
例如在" yyyy-MM-dd&#34 ;;
我想要的只是将这些字符串正确插入到sqlite数据库中,所以它们应该是相同的格式,好吗?
java SimpleDataFormat在没有检查的情况下吃掉所有东西。
子串不适用于此处。 有人可以告诉我检查的方法吗?
答案 0 :(得分:1)
您需要编写一个代码,以便在解析之前区分日期版本。您需要根据要解析的字符串的某些特征自行编写此代码。对于那两个,我会做
if (one_date.split("-")[2].length()==2) {
// parse it with yyyy-MM-dd
} else {
// parse it with dd-MM-yyyy or something
}
你也可以使用.lastIndexOf(' - ');检查最后一个' - '是的,性能会更好
当然我们可以使用.charAt(somePositionIndex)检查' - '标志是我们期望找到的地方。
答案 1 :(得分:0)
您可以这样做:
SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat secondFormat = new SimpleDateFormat("dd-MM-yyyy");
String one_date = "1981-12-07";
String another_date = "07-11-1991";
String[] strs = new String[] { one_date, another_date };
ArrayList<Date> dates = new ArrayList<Date>();
for (String s : strs) {
try {
if (s.matches("\\d{4}-\\d{2}-\\d{2}")) {
dates.add(defaultFormat.parse(s));
} else {
dates.add(secondFormat.parse(s));
}
} catch (ParseException e) {
e.printStackTrace();
}
}
ArrayList<String> converted = new ArrayList<String>();
for (Date d : dates) {
converted.add(defaultFormat.format(d));
}
System.out.println(converted);
答案 2 :(得分:0)
我有许多不同的日期格式,建议您使用natty
以下是如何使用它来返回日期的示例。一旦你有这个日期,你可以简单地格式化它,无论如何。
import com.joestelmach.natty.DateGroup;
import com.joestelmach.natty.Parser;
import java.util.Date;
public class ParseDate {
public static Date parse(String date)throws Exception{
Parser parser = new Parser();
List<DateGroup> groups = parser.parse(date);
int year;
int day=1;
int month=1;
for(DateGroup group : groups){
for( Date d : group.getDates()){
year=d.getYear();
month=d.getMonth();
day=d.getDay();
Date fixedDate=new Date(year,month,day);
return fixedDate;
}
}
throw new Exception("unparsable date");
}
}
答案 3 :(得分:0)
其他答案过于复杂。
使用一种格式进行简单的尝试解析,捕获由不匹配的输入引起的异常。如果抛出异常,请尝试其他格式。
另外,请避免使用java.util.Date/.Calendar类。它们出了名的麻烦,现在被java.time包和/或Joda-Time库所取代。