Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MM/dd/yyyy日期格式给出的日期不正确_Java_Date_Simpledateformat_Java Time - Fatal编程技术网

Java MM/dd/yyyy日期格式给出的日期不正确

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

我提供的是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, 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"/>
   &nbsp;
   <img style="vertical-align:text-bottom" src="images/calimg.jpg"
      width="16" height="16"
      onClick="insSKUDate('skulaunchDateSpan', 'skulaunchDate', this)"
      id="skulaunchDateIcon"/>
   &nbsp;
   <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,那么有一个很好的方法可以使用……请建议我保持这种方法不变