我得到了这样的不规则日期列表:
Thu, 29 Sep 2005 17:52:45 GMT
Wed, 17 Aug 2005 21:21:08 +0200
Wed, 17 Aug 2005 20:08:22 +0200
Mon, 15 Aug 2005 21:44:07 +0200
Sun, 24 Jul 2005 21:47:09 +0200
Sun, 24 Jul 2005 12:37:46 -0700 (PDT)
Sun, 24 Jul 2005 21:37:51 +0200
Mon, 11 Jul 2005 21:19:38 +0200
Mon, 11 Jul 2005 21:19:02 +0200
Mon, 11 Jul 2005 20:43:08 +0200 (CEST)
13 Nov 2006 14:06:20 +0000
如何以及我可以将它们转换为DateTime或只使用JodaTime或默认的Java日期类时间? (joda时间优先)。
它们是String s还是Date s?
Pangea当我阅读你的消息时我很累,我想发布解决方案并且我把它读回来,现在我意识到我可以通过尝试和无效返回或者尝试不同的模式来完成它。
无论如何,这是难以解决的问题:
String[] days = {
"Mon","Tue","Wed","Thu","Fri","Sat","Sun"
};
String[] months = {
"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
};
String[] years = {
"2004","2005","2006","2007","2008","2009","2010","2011"
};
// ORDER IS VERRY IMPORTANT!! ( MEST must be before EST for example)
String[] timesZones = {
"BST","CET","CEST","CST","CDT","EDT","GMT+00:00","GMT","IST","MEST","EST","MET","MDT","PST","PDT","SAST","UTC","UT","W. Europe Standard Time","West-Europa (zomertijd)"
};
DateTime handleDate(String date) {
String origDate = date;
String timeZone ="";
String year ="";
String month ="";
String day ="";
int hours = 0;
int minutes = 0;
int seconds = 0;
// is it valid?
date = trim(date);
if (date.equals("")) {
return null;
}
// first delete the comma that comes mostly after the day
date = date.replaceAll(",","");
// remove the day
for (int i = 0; i < days.length; i++) {
if (date.contains(days[i])) {
date = date.replace(days[i],"");
break;
}
}
// if(date.contains("23:27:17")) println(date);
for (int i = 0; i < timesZones.length; i++) {
// first check with '(' and ')'
String target ="("+timesZones[i]+")";
if (date.contains(target)) {
timeZone = timesZones[i];
date = date.replace(target,"");
break;
}
// if not found check without '(' and ')'
if (date.contains(timesZones[i])) {
timeZone = timesZones[i];
date = date.replace(timesZones[i],"");
break;
}
}
// get the month
for (int i = 0; i < months.length; i++) {
if (date.contains(months[i])) {
month = months[i].toLowerCase(); // !must be lowercase
// must be dutch on my pc
if(month.equals("oct")) month ="okt";
if(month.equals("may")) month ="mei";
if(month.equals("mar")) month ="mrt";
date = date.replace(months[i],"");
break;
}
}
// get the year
for (int i = 0; i < years.length; i++) {
if (date.contains(years[i])) {
year = years[i];
date = date.replace(years[i],"");
break;
}
}
// get the time
Pattern p = Pattern.compile("(\\d\\d):(\\d\\d):(\\d\\d)");
Matcher m = p.matcher(date);
if (m.find()) {
// also fix the time, 00 is not allowed
hours = int(m.group(1));
minutes = int(m.group(2));
seconds = int(m.group(3));
date = date.replaceAll("(\\d\\d:\\d\\d:\\d\\d)","");
}
// get the time difference
date = date.replace("+-","+0"); // bug fix where data is incorrect ( 16 Sep 2007 23:27:17 +-200)
p = Pattern.compile("[+|-]*(\\d\\d)\\d\\d");
m = p.matcher(date);
if (m.find()) {
int timeDifferenceH = int(m.group(1));
date = date.replaceAll("([+|-]*\\d\\d\\d\\d)","");
}
date =""+date; // bug fix
// get the day
for (int i = 31; i >= 1; i--) {
// first check for the ones that contains 2 digits (like 07)
String d = nf(i, 2);
if (date.contains(d)) {
day = nf(i, 2);
date = date.replace(d,"");
break;
}
// check for 1 digit
d =""+i;
if (date.contains(d)) {
day = nf(i, 2);
date = date.replace(d,"");
break;
}
}
// there should be nothing left except white space
date = date.replace("","");
if (date.equals("") == false) {
println("handleDate: problem with input
"+date);
println(origDate+"
");
println(year);
println(month);
println(day);
}
String cleanDate = day+"/"+month+"/"+year+""+nf(hours, 2)+":"+nf(minutes, 2)+":"+nf(seconds, 2);
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MMM/yyyy HH:mm:ss");
try {
DateTime dt = formatter.parseDateTime(cleanDate);
return dt;
} catch (IllegalArgumentException iae) {
println("handleDate: Problem with formatting:"+cleanDate);
}
return null;
}
我不知道伙伴如何用jodatime做,但你可以做的是使用
String pattern ="MM / dd / yyyy";
SimpleDateFormat format = new SimpleDateFormat(pattern);
其中每个都遵循某个DateFormat。 准备预定义的DateFormat处理程序的链(责任链模式),并将日期字符串传递给链。 让适当的处理程序解析日期并为您返回日期。
注意:这是假设您已发布的日期以字符串格式提供给您。 如果你有一个java.util.Date对象,那么我相信你所看到的是一种显示时间格式。
谢谢,明天我会试试