Java MM/dd/yyyy日期格式给出的日期不正确
我提供的是MM/dd/yyyy格式的日期输入,该格式在UI上产生错误的日期,这仅在MM/dd/yyyy格式中发生,但是,如果输入是dd/MM/yyyy格式,则工作正常 如果今天的日期是2020年8月4日,那么它将被渲染为2021年9月7日,这当然是错误的日期 应用程序使用extjs3作为前端,因此使用日期选择器Java MM/dd/yyyy日期格式给出的日期不正确,java,date,simpledateformat,java-time,Java,Date,Simpledateformat,Java Time,我提供的是MM/dd/yyyy格式的日期输入,该格式在UI上产生错误的日期,这仅在MM/dd/yyyy格式中发生,但是,如果输入是dd/MM/yyyy格式,则工作正常 如果今天的日期是2020年8月4日,那么它将被渲染为2021年9月7日,这当然是错误的日期 应用程序使用extjs3作为前端,因此使用日期选择器 function insSKUDate(element,textElement,img){ var selectHandler = function(myDP, dat
function insSKUDate(element,textElement,img){
var selectHandler = function(myDP, date) {
var field = document.getElementById(textElement);
field.value = date.format('m/d/Y');
field.text = date.format('m/d/Y');
dateField = document.getElementById(textElement);
myDP.hide();
};
var myDP = new Ext.DatePicker(
{
startDay: 1,
minDate: new Date(),
listeners: {
'select':selectHandler
}
}
);
var innerdata = document.getElementById(element);
innerdata.innerHTML="";
myDP.render(element);
var clickHandler = function() {
myDP.show();
};
Ext.EventManager.on(img.id, 'click', clickHandler);
}
HTML格式的某处
<td width="20%">
<input type="text" class="textbox"
value="<s:property value='skulaunchDate'/>"
name="skulaunchDate"
id="skulaunchDate" readonly="readonly"/>
<img style="vertical-align:text-bottom" src="images/calimg.jpg"
width="16" height="16"
onClick="insSKUDate('skulaunchDateSpan', 'skulaunchDate', this)"
id="skulaunchDateIcon"/>
<span id="skulaunchDateSpan"
style="position:absolute;z-index:1;width:50px;"></span>
<div id="skulaunchDateErrorMsg" align="left"
style="color:#FF0000"/>
</td>
我对下面的方法有疑问,但它看起来不错
public String getSkulaunchDate() {
return skulaunchDate;
}
public void setSkulaunchDate(String skulaunchDate) {
this.skulaunchDate = skulaunchDate;
}
if (bean.getSkulaunchDate() != null)
setSkulaunchDate(dateUtil.getSQLDateToString(bean.getSkulaunchDate(), "MM/dd/yyyy"));//Replace dd/MM/yyyy to MM/dd/yyyy
// setSkulaunchDate(getSkuLaunchDateStrFormat(bean,dateUtil));//Replace dd/MM/yyyy to MM/dd/yyyy
System.out.println("3.getSkulaunchDate----"+ getSkulaunchDate());
setContactPersonName(bean.getContactPersonName());
setContactPersonPosition(bean.getContactPersonPosition());
setContactPersonEmail(bean.getContactPersonEmail());
setContactPersonNumber(bean.getContactPersonNumber());
setRemarks(bean.getRemarks());
setTpRemarks(bean.getTpRemarks());
try {
if(request_bean.getRequestDate() != null){
setRequest_date(dateUtil.getUtilDateToString(request_bean.getRequestDate(), "MM/dd/yyyy"));//Replace dd/MM/yyyy to MM/dd/yyyy
}
} catch (Exception ex) {
logger.error(ex.getStackTrace());
}
public String getSQLDateToString(java.sql.Date date, String format) {
String result = null;
try {
result = new SimpleDateFormat(format).format(date);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
我们发现,输入的SQL日期在解析时出现了一些问题,除了这个util日期之外,它工作正常。
请向我建议纠正此问题的解决方案。已知遗留日期时间API为。由于您使用的是Java-7,不幸的是,您将不得不接受它,或者您可以使用库将使用的代码向后移植到Java-7 我建议您解决代码中的以下问题:
区域设置的情况下使用日期时间解析/格式化API
e.printStackTrace()
,getSQLDateToString
是个坏主意。顺便说一下,不会引发异常。您可能对哪个抛出ParseException
感到困惑import java.text.SimpleDateFormat;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// Today
java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
System.out.println(getSQLDateToString(date, "MM/dd/yyyy"));
System.out.println(getSQLDateToString(date, "dd/MM/yyyy"));
}
public static String getSQLDateToString(java.sql.Date date, String format) {
return new SimpleDateFormat(format, Locale.ENGLISH).format(date);
}
}
输出:
02/07/2021
07/02/2021
02/07/2021
07/02/2021
使用现代日期时间API
使用java.sql.Date#toLocalDate
将java.sql.Date
转换为LocalDate
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// Today
java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
System.out.println(getSQLDateToString(date, "MM/dd/yyyy"));
System.out.println(getSQLDateToString(date, "dd/MM/yyyy"));
}
public static String getSQLDateToString(java.sql.Date date, String format) {
LocalDate localDate = date.toLocalDate();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format, Locale.ENGLISH);
return dtf.format(localDate);
}
}
输出:
02/07/2021
07/02/2021
02/07/2021
07/02/2021
从了解现代日期时间API停止使用
java.util.date
和java.text.simpleDataFormat
,这是一个过时的API。使用java.time.LocalDate
进行仅日期操作,并使用java.time.format.DateTimeFormatter
对其进行格式化。我使用的是java 7OK,那么有一个很好的方法可以使用……请建议我保持这种方法不变