J'utilise la bibliothèque joda-time en Java et j'ai une date et une heure stockées comme org.joda.time.dateTetime objet.
Comment puis-je convertir de manière fiable cet objet DateTime en une chaîne qui sera analysée correctement par SQL Server (y compris le fuseau horaire), de sorte que je puisse l'utiliser dans une instruction INSERT SQL?
Utilisez Java.sql.Timestamp
avec PreparedStatement#setTimestamp()
.
ps.setTimestamp(1, new Timestamp(dateTime.getMillis()));
Notez que Java.sql.Date
stocke uniquement la partie Date, pas la partie temporelle.
vous pouvez essayer ce code simple:
DateTime dt = new DateTime();
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
String dtStr = fmt.print(dt);
Veillez à considérer les fuseaux horaires. L'utilisation de nouveaux horodatages () peut être délicate car elle s'attend à ce qui s'attend à des millisecondes dans GMT.
DateTime dt = new DateTime(2010, 1, 1, 14, 30, 59, 1, DateTimeZone.forOffsetHoursMinutes(7, 0));
Timestamp ts = new Timestamp(dt.getMillis());
System.out.println(dt); // prints 2010-01-01T14:30:59.001+07:00
System.out.println(ts); // prints 2010-01-01 08:30:59.001
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
String sqlTimeString = fmt.print(dt);
System.out.println(sqlTimeString); // prints 2010-01-01 14:30:59
J'utilise cette fonction simple pour obtenir un format de date SQL-convivial à partir d'un JodatimeDateTime
objet:
// Converts a DateTime object into a SQL-format friendly string.
//
// Return format looks like this: 2014-01-22 10:05:34.546
//
public static String toSql(DateTime dateTime) {
return new Timestamp( dateTime.getMillis() ).toString();
}