Java 将字符串转换为日期时间
我必须这样做Java 将字符串转换为日期时间,java,date,Java,Date,我必须这样做 Thu Oct 03 07:47:22 2013 Mon Jul 05 08:47:22 2013 我想比较这些日期,我使用的是SimpleDateFormat(“EEE-MMM-dd-HH:mm:ss-yyy”)但它给了我一个异常:java.text.ParseException:不可解析的日期: 请帮我解决这个问题 您今年缺少了一个y: EEE MMM dd HH:mm:ss yyyy 但是您应该使用一个更强大的库,org.jodatime import org.joda.
Thu Oct 03 07:47:22 2013
Mon Jul 05 08:47:22 2013
我想比较这些日期,我使用的是SimpleDateFormat(“EEE-MMM-dd-HH:mm:ss-yyy”)
但它给了我一个异常:java.text.ParseException:不可解析的日期:
请帮我解决这个问题 您今年缺少了一个
y
:
EEE MMM dd HH:mm:ss yyyy
但是您应该使用一个更强大的库,org.jodatime
import org.joda.time.format.DateTimeFormat;
import org.joda.time.DateTime;
DateTimeFormat format = DateTimeFormat.forPattern("EEE MMM dd HH::mm:ss yyyy");
DateTime time = format.parseDateTime("Thu Oct 03 07:47:22 2013");
格式中缺少一个
y
。这一年需要4个y
(虽然它可以与yyy
配合使用,但最好使用yyy
,因为它会使您的格式更易于其他人阅读)。要获取DateTime
对象,可以使用Date
对象,该对象通过解析字符串来构造DateTime
import org.joda.time.format.DateTimeFormat;
import org.joda.time.DateTime;
DateTimeFormat format = DateTimeFormat.forPattern("EEE MMM dd HH::mm:ss yyyy");
DateTime time = format.parseDateTime("Thu Oct 03 07:47:22 2013");
试着这样做:-
String str = "Thu Oct 03 07:47:22 2013";
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy"); // You missed a y here.
try {
Date d = sdf.parse(str);
DateTime dt = new DateTime(d.getTime()); // Your DateTime Object.
} catch (ParseException e) {
// Parse Exception
}
这是日期比较的完整示例
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class dateCompare
{
public static void main( String[] args )
{
try{
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyy");
Date date1 = sdf.parse("Thu Oct 03 07:47:22 2013");
Date date2 = sdf.parse("Mon Jul 05 08:47:22 2013");
System.out.println(sdf.format(date1));
System.out.println(sdf.format(date2));
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
if(cal1.after(cal2)){
System.out.println("Date1 is after Date2");
}
if(cal1.before(cal2)){
System.out.println("Date1 is before Date2");
}
if(cal1.equals(cal2)){
System.out.println("Date1 is equal Date2");
}
}catch(ParseException ex){
ex.printStackTrace();
}
}
}
输出
Thu Oct 03 07:47:22 2013
Fri Jul 05 08:47:22 2013
Date1 is after Date2
这是带有代码和输出的屏幕截图
试试这个方法
public static Date formatStringToDate(String strDate) throws ModuleException {
Date dtReturn = null;
if (strDate != null && !strDate.equals("")) {
int date = Integer.parseInt(strDate.substring(0, 2));
int month = Integer.parseInt(strDate.substring(3, 5));
int year = Integer.parseInt(strDate.substring(6, 10));
Calendar validDate = new GregorianCalendar(year, month - 1, date);
dtReturn = new Date(validDate.getTime().getTime());
}
return dtReturn;
}
给我们代码…你是如何比较日期的?
EEE MMM dd HH:mm:ss yyyy
1个额外的y,这就是问题所在吗?这种模式很好。你能给我们看一下代码吗?你试过yyy了吗?@RohitJain,Renjith-嗯,它也可以和yyy
一起工作,但是yyy
肯定会提高可读性。@R.J。。。当然,它提高了可读性。但是yyy没有给出任何例外。因此,您的答案必须是注释而不是答案。它回答了将字符串转换为日期时间的问题标题。为什么它应该是一个评论?!你试过yyy吗?@user2842269只需复制整个代码并运行它。我刚刚在我的计算机上进行了测试,并将答案与输出一起发布。我认为我在回答中使用的格式可能与您尝试的格式不同。请使用您在问题中发布的相同格式。如果您有不同的格式,请告诉我,我将更改我的答案accordingly@user2842269这很奇怪,因为它在我这边效果很好。好吧,我会包括截图also@user2842269见ScreenShot当我在写MMM时会给出一个例外,但是当MM nad例如05时,它是OK@user2842269附上显示代码和输出(或异常)的屏幕截图