【问题标题】:JAVA date is shifted by one day in production machinesJAVA日期在生产机器中偏移了一天
【发布时间】:2021-09-17 01:00:13
【问题描述】:

我有一个带有 JSP 的 java spring mvc 项目,我在其中使用“jQuery datetimepicker”操作日期,问题是本地日期记录正确,但在生产中日期总是偏移一天,我检查时区使用TimeZone.getDefault(),和我的本地机器一样,如果有人有任何想法可以检查

代码 JSP:

<div class='col-lg-12'>
    <div class='form-group'>
        <fmt:formatDate pattern="dd-MM-yyyy" value="${child.dateNaissance}" var="myDateVar"/>
                                            <input type="text" id="myDatepicker${status.index}" class='form-control date_input'  required="required"
                                                        name='parent.enfants[${status.index}].dateNaissance' value='${myDateVar}'
                                                        placeholder="Date de naissance* (JJ-MM-AAAA)" >
                                        </div>
                                    </div>

查询:

(function($) {
var today = new Date();
var lastDate = new Date(today.getFullYear(), 11, 31);
var defaultDate = new Date();
defaultDate.setMonth(defaultDate.getMonth() - 30);
var minimumDate = new Date();
minimumDate.setFullYear(minimumDate.getFullYear() - 18);

var datePickerOptions = {
        todayHighlight: true,
        changeMonth: true,
        changeYear: true,
        showOtherMonths: true,
        selectOtherMonths: true,
        minDate : minimumDate,
        yearRange: "-21:+0",
        maxDate: defaultDate,
        dateFormat: "dd-mm-yy",
        closeText: "Fermer",
        prevText: "Précédent",
        nextText: "Suivant",
        currentText: "Aujourd'hui",
        monthNames: ["janvier", "février", "mars", "avril", "mai", "juin",
          "juillet", "août", "septembre", "octobre", "novembre", "décembre"
        ],
        monthNamesShort: ["janv.", "févr.", "mars", "avr.", "mai", "juin",
          "juil.", "août", "sept.", "oct.", "nov.", "déc."
        ],
        dayNames: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"],
        dayNamesShort: ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
        dayNamesMin: ["D", "L", "M", "M", "J", "V", "S"],

        beforeShow : function() {
            setTimeout(function() {
                $('.ui-datepicker').css('z-index', 99999999999999);
                $('.ui-datepicker').css('position', 'absolute');

            }, 0);
        }
    };
$(document)
        .ready(
                function() {
                     $(".birthdayDatePicker").datepicker(datePickerOptions);
                });

})(jQuery);

Java 代码:

    /**
 * Binding de la date en format standard
 * 
 * @param binder Binder
 */
@InitBinder
public void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
    dateFormat.setLenient(false);
    CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
    binder.registerCustomEditor(Date.class, editor);
}

实体:

    @DateTimeFormat(pattern = "dd-MM-yyyy")
private Date dateNaissance;

【问题讨论】:

  • 需要更多详细信息。您如何解析作为请求参数提供的日期时间?你使用什么类(ZonedDateTimeInstant,例如)。请提供一些代码sn-ps
  • 编写你正在使用的代码
  • @Ofek 我添加了一些代码,才知道这种行为涉及整个应用程序
  • @SemyonKirekov 抱歉耽搁了

标签: java jquery spring jsp


【解决方案1】:

我猜问题是关于SimpleDateFormat。该模式不包含时区 - dd-MM-yyyy。作为参数传递的日期不一定与服务器具有相同的时区。这就是您可能会遇到转换问题的原因。

我认为您应该使用 DateTimeFormatter.ISO_OFFSET_DATE_TIME 之类的格式模式。

附: java.util.Date 不建议使用了。看看java.time.ZonedDateTime

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-18
    • 2012-01-08
    • 2016-04-21
    • 2018-02-03
    • 2010-10-22
    • 2011-09-08
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多