Avez-vous essayé d'utiliser Timestamp.valueOf(String)
? Il semble qu'il devrait faire presque Vous devez simplement remplacer le séparateur entre la date et l'heure par un espace, et ceux entre les heures et les minutes, et les minutes et les heures, par des deux points :
import java.sql.*;
public class Test {
public static void main(String[] args) {
String text = "2011-10-02 18:48:05.123456";
Timestamp ts = Timestamp.valueOf(text);
System.out.println(ts.getNanos());
}
}
En supposant que vous avez déjà validé la longueur de la chaîne de caractères, la conversion se fera au bon format :
static String convertSeparators(String input) {
char[] chars = input.toCharArray();
chars[10] = ' ';
chars[13] = ':';
chars[16] = ':';
return new String(chars);
}
Vous pouvez également analyser en millisecondes en prenant une sous-chaîne et en utilisant Joda Time ou SimpleDateFormat
(Je préfère de loin Joda Time, mais votre avis peut varier). Puis prenez le reste de la chaîne comme une autre chaîne et analysez-la avec Integer.parseInt
. Vous pouvez ensuite combiner les valeurs assez facilement :
Date date = parseDateFromFirstPart();
int micros = parseJustLastThreeDigits();
Timestamp ts = new Timestamp(date.getTime());
ts.setNanos(ts.getNanos() + micros * 1000);
2 votes
Si l'horodatage provient d'une base de données DB2, pourquoi le lire sous forme de chaîne plutôt que de le lire directement sous forme d'horodatage ?
1 votes
L'horodatage provient de la base de données et un client nous le renvoie pour une lecture avec clé.
1 votes
Si vous utilisez l'horodatage pour une lecture avec clé, et que vous l'envoyez d'abord au client, vous pourriez envisager de le convertir en un nombre de nanosecondes et de le relire ensuite, au lieu d'une valeur de chaîne de caractères.
long l = ts.getTime()
et le relire ensuite avecnew Timestamp(l)
. Vous pourriez même sérialiser cette valeur pour gagner de l'espace sur le fil (mais vous perdriez en redondance humaine dans ce cas).0 votes
Que faire si ma chaîne n'est pas dans ce format et plutôt dans le format mm/dd/yyyy hh:mm. Dans ce cas, comment convertir au format Timestamp ?
0 votes
UPDATE Le nouveau paquet java.time intégré à Java 8 gère la résolution en nanosecondes. Cela peut être plus facile/meilleur que de traiter avec java.sql.Timestamp en fonction de votre scénario. Vous pouvez convertir a y de java.time & java.sql.Timestamp également.