Проблема преобразования даты в Java SQL: год отображается неправильноJAVA

Программисты JAVA общаются здесь
Anonymous
Проблема преобразования даты в Java SQL: год отображается неправильно

Сообщение Anonymous »

У меня возникла проблема с получением дат из базы данных SQL с помощью Java. Возвращаемый год в базе данных отображается как 2024, но когда я получаю его через свой DAO, год преобразуется в 2024 – 543 = 1481. Я подтвердил, что SQL-запрос возвращает правильный год (2024).
Вот фрагмент моего кода DAO и сервиса:

Код: Выделить всё

@Override
public List getAll() {
ArrayList list = new ArrayList();
String sql = "SELECT * FROM RECEIPT";
Connection conn = DatabaseHelper.getConnect();
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

while (rs.next()) {
Receipt receipt = Receipt.fromResultSet(rs);
list.add(receipt);
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
return list;
}

public static Receipt fromResultSet(ResultSet rs) {
Receipt receipt = new Receipt();
try {
receipt.setId(rs.getInt("RECEIPT_ID"));
receipt.setCreatedDate(rs.getTimestamp("R_DATETIME"));
receipt.setTotal(rs.getDouble("R_TOTAL_PRICE"));
receipt.setReceived(rs.getDouble("R_AMOUNT_RECEIVED"));
receipt.setChange(rs.getDouble("R_CHANGE"));
receipt.setTotalQuantity(rs.getInt("R_QTY"));
receipt.setBranchId(rs.getInt("BRANCH_ID"));
receipt.setUserId(rs.getInt("USER_ID"));
receipt.setCustomerId(rs.getInt("CUSTOMER_ID"));
receipt.setPaymentCode(rs.getInt("PAYMENT_CODE"));
receipt.setPromotionID(rs.getInt("PROMOTION_ID"));
} catch (SQLException ex) {
Logger.getLogger(Receipt.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
return receipt;
}

Код: Выделить всё

public List getReceipts() {
ReceiptDao receiptDao = new ReceiptDao();
return receiptDao.getAll();
}
Дополнительная информация:
Я уже пытался изменить настройки локали в моей системе Windows, чтобы проверить, повлияет ли это на вывод, но проблема не устранена.
Поле R_DATETIME в базе данных правильно хранится как TIMESTAMP.
Вопрос:
Почему год отображается неправильно, когда он извлекается в моем Java-приложении? Как я могу гарантировать, что оно отображается как 2024, а не преобразуется в 1481?
  • Значение и тип, возвращаемые rs.getTimestamp(" R_DATETIME"):

    Метод rs.getTimestamp("R_DATETIME") возвращает объект java.sql.Timestamp. Например, если R_DATETIME в базе данных имеет вид «2024-09-30 12:34:56», это значение, которое следует получить.
  • Функция setCreatedDate():

    Метод setCreatedDate(Timestamp CreateDate) в квитанции класс используется для установки свойства createDate объекта Receipt. Он сохраняет объект Timestamp без каких-либо изменений.


Подробнее здесь: https://stackoverflow.com/questions/790 ... ncorrectly

Вернуться в «JAVA»