java feb 8_ 2014 2:29:51 pm时间格式转换_关于java:转换不规则日期

我得到了这样的不规则日期列表:

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对象,那么我相信你所看到的是一种显示时间格式。

谢谢,明天我会试试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值