Примеры кода для преобразования
Полный набор сценариев преобразования
Пример базового преобразования
public class LocalDateToTimestampConverter {
public static Timestamp convertLocalDateToTimestamp(LocalDate localDate) {
return Timestamp.valueOf(localDate.atStartOfDay());
}
}
Несколько методов преобразования
1. Преобразование с использованием системного часового пояса по умолчанию
public Timestamp convertWithSystemZone(LocalDate localDate) {
return Timestamp.from(
localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()
);
}
2. Явное преобразование в UTC
public Timestamp convertToUTCTimestamp(LocalDate localDate) {
return Timestamp.from(
localDate.atStartOfDay(ZoneId.of("UTC")).toInstant()
);
}
Диаграмма потока стратегии преобразования
graph TD
A[Входной LocalDate] --> B{Метод преобразования}
B --> |Метод 1| C[atStartOfDay()]
B --> |Метод 2| D[toInstant()]
C --> E[Выходной Timestamp]
D --> E
Практические сценарии преобразования
Пример вставки в базу данных
public class DatabaseConverter {
public void insertDateRecord(Connection conn, LocalDate inputDate) {
String sql = "INSERT INTO date_records (record_timestamp) VALUES (?)";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
Timestamp timestamp = Timestamp.valueOf(inputDate.atStartOfDay());
pstmt.setTimestamp(1, timestamp);
pstmt.executeUpdate();
}
}
}
Сравнение методов преобразования
Метод преобразования |
Точность |
Обработка часового пояса |
Сценарий использования |
atStartOfDay() |
Начало дня |
Системный по умолчанию |
Простые преобразования |
toInstant() |
Миллисекунды |
Явный часовой пояс |
Точная временная метка |
Обработка ошибок и валидация
public Timestamp safeConvert(LocalDate localDate) {
Objects.requireNonNull(localDate, "Входная дата не может быть null");
try {
return Timestamp.valueOf(localDate.atStartOfDay());
} catch (DateTimeException e) {
// Зарегистрировать ошибку или обработать ее корректно
return null;
}
}
Продвинутые методы преобразования
Преобразование с использованием пользовательского часового пояса
public Timestamp convertWithCustomZone(LocalDate localDate, String zoneId) {
ZoneId customZone = ZoneId.of(zoneId);
return Timestamp.from(localDate.atStartOfDay(customZone).toInstant());
}
Вопросы производительности
- Предпочитайте
toInstant()
для требований высокой точности.
- Кэшируйте экземпляры
ZoneId
, если это возможно.
- Используйте явную обработку ошибок.
В LabEx мы подчеркиваем важность написания надежного и эффективного кода для преобразования дат, который без труда справляется с различными сценариями.