Convertir Java Chaîne sql.Timestamp
Ai une Chaîne de venir avec le format: YYYY-MM-DD-HH.MM.SS.NNNNNN L'Horodatage est à venir à partir d'une base de données DB2. J'ai besoin d'analyser en java.sql.D'horodatage et de ne PAS perdre tout precison. Jusqu'à présent, j'ai été incapable de trouver le code existant pour analyser que loin de microsecondes. SimpleDateFormat retourne une Date et une seule analyse à quelques millisecondes. Regardé JodaTime brièvement et de ne pas le voir qui serait le soit.
- Si le timestamp est livré à partir d'une base de données DB2, pourquoi lisez-vous comme une chaîne de caractères plutôt que de le lire comme un Timestamp directement?
- L'heure est venue de la base de données et un client est de nous le retourner pour une lecture par clé.
- Si vous utilisez le timestamp pour une lecture par clé, et vous êtes sans doute d'abord de l'envoyer au client, vous pouvez également envisager de convertir à un long de nanosecondes et de le lire, au lieu d'une chaîne de valeur. c'est à dire envoyer
long l = ts.getTime()
et puis le lire avecnew Timestamp(l)
. Vous pourriez même sérialiser cette valeur pour économiser de l'espace sur le fil (mais vous perdez de l'homme une précision d'affichage dans ce cas). - Que faire si ma chaîne n'est pas dans ce format et plutôt en mm/jj/aaaa hh:mm format. Ce dans ce cas comment faire pour convertir au format d'Horodatage
- mise à JOUR La java.pack construit en Java 8 poignées de résolution de l'ordre de la nanoseconde. Peut-être plus facile/mieux que de traiter avec java.sql.Horodatage selon votre scénario. Vous pouvez convertir des pour et de java.temps & java.sql.Horodatage ainsi.
InformationsquelleAutor Dan | 2011-10-02
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé d'utiliser
Timestamp.valueOf(String)
? Il semble que ça devrait le faire presque exactement ce que vous voulez - vous juste besoin de changer le séparateur entre la date et le temps de l'espace, et ceux entre les heures et les minutes, et les minutes et les heures, à deux points:En supposant que vous avez déjà validé la longueur de la chaîne, cela permettra de convertir au bon format:
Sinon, l'analyser en bas de millisecondes en prenant une sous-chaîne et à l'aide de Joda Time ou
SimpleDateFormat
(je préfère largement Joda de Temps, mais votre kilométrage peut varier). Prendre ensuite le reste de la chaîne à une autre chaîne et analyser avecInteger.parseInt
. Vous pouvez ensuite combiner les valeurs assez facilement:Vous pouvez utiliser
Timestamp.valueOf(String)
. La documentation indique qu'il comprend des horodateurs dans le formatyyyy-mm-dd hh:mm:ss[.f...]
, de sorte que vous pourriez avoir besoin de modifier les séparateurs de champ en entrant votre chaîne.Et puis, si vous allez faire cela, alors vous pouvez simplement analyser vous-même et utiliser le
setNanos
méthode pour stocker le nombre de microsecondes.Ici de la manière prévue pour convertir une Chaîne en Date:
Certes, il a seulement une milliseconde, mais dans tous les services plus lent que Twitter, c'est tout ce dont vous aurez besoin, surtout depuis que la plupart des machines n'ont même pas la piste vers le bas à la réalité de nanosecondes.
Je crois que vous avez besoin pour ce faire:
Option 2
Convertir le format de la date souligné dans Jon Skeet la réponse de l'utiliser.
Si vous avez le temps comme une chaîne de caractères dans le format tel que 1441963946053 vous ne pouvait tout simplement faire quelque chose comme ce qui suit: