Java 尝试将日期转换为本地时区时出错
我将两种不同的日期格式转换为本地时区,并使用简单的日期格式转换为单一格式,然后比较它们是否相等。 我的代码无法从代码中给定的日期转换 当我在“2019年9月11日-1:00 am BRT/BRDT”上午提供开始日期时,我的代码工作正常,但在下午时间它将失败。样本日期为“2019年9月11日-下午1:00 BRT/BRDT” 公共类日期示例{Java 尝试将日期转换为本地时区时出错,java,date,simpledateformat,Java,Date,Simpledateformat,我将两种不同的日期格式转换为本地时区,并使用简单的日期格式转换为单一格式,然后比较它们是否相等。 我的代码无法从代码中给定的日期转换 当我在“2019年9月11日-1:00 am BRT/BRDT”上午提供开始日期时,我的代码工作正常,但在下午时间它将失败。样本日期为“2019年9月11日-下午1:00 BRT/BRDT” 公共类日期示例{ public static void main(String[] args) throws ParseException { DateSample
public static void main(String[] args) throws ParseException {
DateSample obj = new DateSample ();
String str= obj.dateCompare(
"MMM dd,yyyy - HH:mm aaa z",
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
"Sep 11, 2019 - 1:00 pm BRT/BRDT",
"2019-09-11T13:00:00.000-03:00"
);
System.out.println(str);
}
String dateCompare(String fromDateFormat, String toDateFormat,String fromdate, String todate)throws ParseException{
String CheckFormat = "MMMMM yyyy HH:mm:ss.SSSZ";
String dateStringFrom;
String dateStringTo;
Date DF = new Date();
Date DT = new Date();
int flagtodate=0;
int flagfromdate=0;
try
{
//DateFormatdf = DateFormat.getDateInstance(DateFormat.SHORT);
DateFormat FromDF = new SimpleDateFormat(fromDateFormat);
FromDF.setLenient(false);
Date FromDate = FromDF.parse(fromdate);
dateStringFrom = new SimpleDateFormat(CheckFormat).format(FromDate);
DateFormat FromDF1 = new SimpleDateFormat(CheckFormat);
DF=FromDF1.parse(dateStringFrom);
System.out.println("From Date is ok = " + dateStringFrom);
}
catch (ParseException e)
{
flagfromdate = 1;
}
catch (IllegalArgumentException e)
{
flagfromdate = 1;
}
try
{
//DateFormatdf = DateFormat.getDateInstance(DateFormat.SHORT);
DateFormat ToDF = new SimpleDateFormat(toDateFormat);
ToDF.setLenient(false);
Date ToDate = ToDF.parse(todate);
dateStringTo = new SimpleDateFormat(CheckFormat).format(ToDate);
DateFormat ToDF1 = new SimpleDateFormat(CheckFormat);
DT=ToDF1.parse(dateStringTo);
System.out.println("To Date is ok = " + dateStringTo);
}
catch (ParseException e)
{
flagtodate=1;
}
catch (IllegalArgumentException e)
{
flagtodate=1;
}
if(flagfromdate == 0 &&flagtodate==0)
{
if(DF.equals(DT))
{
// if the date is same
return "FromDate and ToDate are same";
}
else if(DF.before(DT))
{
//if the from date is before the to date
return "FromDate is less than ToDate";
}
else
{
// if the date from is after the to date
return "FromDate is greater than the ToDate";
}
}
return "Error";
}
}
下面提到的是控制台在故障情况下的输出:
到目前为止一切正常=2019年9月21:30:00.000+0530
错误
成功案例输出:
起始日期确定=2019年9月09:30:00.000+0530
到目前为止一切正常=2019年9月21:30:00.000+0530
FromDate小于ToDate如果错误处理非常糟糕,请在捕获异常时打印错误消息,以便知道发生了什么。或者根本不在方法中捕获异常,而是在外部执行,并使用
HH
在am/pm(1-12)和24格式(0-23)两种情况下在那里打印(同时打印堆栈跟踪)-这至少很奇怪。。。。byHH
代表(0-23),HH
代表(1-12)@CarlosHeuberger谢谢。。!!你把我引向正确的方向。。!!它解决了我的问题……)我建议您不要使用SimpleDateFormat
和Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。而是使用ZonedDateTime
和DateTimeFormatter
,两者都来自。