Формат даты ММ / дд / гггг дает неверную дату - PullRequest
0 голосов
/ 04 августа 2020

Я предоставляю ввод даты в формате MM / dd / yyyy, формат дает неправильную дату в пользовательском интерфейсе, это происходит только с форматом MM / dd / yyyy, однако он работает нормально, если ввод будет в dd / MM / yyyy.

например: если сегодняшняя дата 04/08/2020, то она отображается как 07/09/2021, что, конечно, неверная дата

Приложение, использующее 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 форме

image

Где-то в execute () моих Struts

 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 с некоторыми проблема во время синтаксического анализа, кроме этой даты утилиты работает нормально. пожалуйста, предложите мне решение, чтобы исправить это.

1 Ответ

0 голосов
/ 04 августа 2020

Известно, что устаревший API даты и времени запутан и подвержен ошибкам . Поскольку вы используете Java -7, к сожалению, вам либо придется смириться с этим, либо вы можете выполнить бэкпорт с помощью библиотеки ThreeTen-Backport .

Я могу подтвердить, что проблем нет с вашей реализацией getSQLDateToString (пожалуйста, проверьте следующую демонстрацию в качестве доказательства). Однако я подозреваю, что он получает правильное значение даты. Сказав это, я бы проверил значение bean.getSkulaunchDate() перед вызовом, setSkulaunchDate(dateUtil.getSQLDateToString(bean.getSkulaunchDate(), "MM/dd/yyyy"))

import java.text.SimpleDateFormat;

public class Main {
    public static void main(String[] args) {
        System.out.println(getSQLDateToString(new java.sql.Date(java.sql.Date.parse("Sat, 12 Aug 1995 13:30:00 GMT")),
                "MM/dd/yyyy"));
        System.out.println(getSQLDateToString(new java.sql.Date(java.sql.Date.parse("Sat, 12 Aug 1995 13:30:00 GMT")),
                "dd/MM/yyyy"));
    }

    static 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;
    }
}

Вывод:

08/12/1995
12/08/1995
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...