gpt4 book ai didi

java - 如何解决 Java Spring 中日期的一日偏移问题

转载 作者:行者123 更新时间:2023-12-02 01:04:16 24 4
gpt4 key购买 nike

我很累。我无法解决 Java Spring 中丢失一天的问题。 stackoverflow上有很多类似的问题,但没有一个对我有帮助。

我的 Spring 应用程序使用 java.time.LocalDate 包并接受前端日期字段中的生日(react-datetime 组件)。采用 yyyy-mm-dd 格式。 Spring使用jdbc将数据保存到mysql数据库的表中。

将生日作为一天丢​​失保存到数据库中。例如用户输入 - 1998-04-12 那么它将被保存为 1998-04-11。这种情况仅在某些月份发生,从 11 月到 3 月的月份正确保存到数据库,但其他月份丢失了一天。这涉及到创建和编辑用户。

代码如下:

...
import java.time.LocalDate;

public class UserInfo {
...
public LocalDate birthday;

}

...

@PreAuthorize("hasAnyAuthority('ADMIN_GROUP_EDIT, SPEC_USERS_EDIT, USERS_EDIT, REGISTRATION_DATA_EDIT')")
@RequestMapping(value = "/update/{id}", method = PUT)
public void update(HttpServletResponse response, HttpServletRequest request, @PathVariable Long id) {
User curUser = getUser();
log.info("Got update user request by user " + curUser);
log.info("For user id " + id);
String reqBody = Utils.toString(request);
if (reqBody == null) {
returnError(response, RestErrorCode.EMPTY_REQUEST);
return;
}
JsonElement body = new JsonParser().parse(reqBody);
JsonObject jsonObject = body.getAsJsonObject();
if (jsonObject == null) {
log.error(BAD_REQUEST_BODY_MESS);
return;
}

UserInfo info = null;

if (jsonObject.has("info")) {
String infoStr = jsonObject.get("info").toString();
info = GsonHelper.fromJson(infoStr, UserInfo.class);
}

userService.updateUserInfo(info);

...

@Transactional
public int updateUserInfo(UserInfo info) {
info.editorUserId = AuthProvider.getCurUserId();
return transactionTemplate.execute(status -> {
String update = "" +
"UPDATE USER_INFO " +
" SET first_name = COALESCE(:firstName, first_name), " +
" middle_name = COALESCE(:middleName, middle_name), " +
" last_name = COALESCE(:lastName, last_name), " +
" birthday = COALESCE(:birthday, birthday), " +
" address = COALESCE(:address, address)," +
" email = COALESCE(:email, email)," +
"WHERE id =:id";
return npDb.update(update, new FieldSqlParameterSource(info));
});
}

我调试了我的代码,后端正确接受用户的生日并使用简单的jdbc,但是我没有找到老鼠在哪里。如何克服这个问题呢?

最佳答案

这看起来像是一个时区问题,特别是与夏令时有关的问题(欧洲国家的三月最后一个星期日到十月最后一个星期日)。检查计算机的时区设置、Java 环境和数据库服务器是否匹配。像生日这样的日期应该是 DATE 类型(而不是 TIMESTAMP)。

关于java - 如何解决 Java Spring 中日期的一日偏移问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60262927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com