6
votes

Java: convertir une heure d'aujourd'hui à un horodatage

J'utilise Java 6, et j'ai un temps de la date actuelle en tant que chaîne, comme ceci: 14:21:16 , et j'ai besoin de convertir ceci en un horodatage objet pour stocker dans un base de données.

Cependant, il semble y avoir un bon moyen d'obtenir un horodatage de ceci. Timeestamp.Valueof (String) est assez proche, mais nécessite une date. Y a-t-il un bon moyen de faire un objet d'horodatage d'une telle chaîne?


0 commentaires

6 Réponses :


0
votes

Avoir un jour donné (par exemple, une époque unix?) Servir comme la journée. Lorsque vous l'utilisez, utilisez uniquement les paramètres temporels que vous aimez, ignorant la journée.

Une autre option serait java.sql.time

http://download.oracle. COM / Javase / 1.4.2 / Docs / API / Java / SQL / TIME.HTM


0 commentaires

6
votes

Personnellement, j'utiliserais Joda Time pour analyser l'heure à un localTime , et ajoutez-le à localDate pour obtenir un localDateTime , puis convertissez-le dans un instantané en utilisant le fuseau horaire qui vous intéresse . (Ou utiliser localTime.todateTimeToday (DateTimezone) .)

Créez ensuite un timbre d'horaire à l'aide de l'horodatage horodatage (long) constructeur.

Il y a beaucoup d'autres approches (par exemple, en utilisant SimpleDateDormat au lieu de analyser le temps Joda, si vous voulez vraiment ...) Mais vous êtes en fin de compte, vous êtes susceptible de vouloir que l'horodatage ) constructeur à la fin. (Le bénéfice de l'utilisation de Joda Heure ici est qu'il est évident ce qui est représenté à chaque étape - vous n'essayez pas de traiter un «temps seulement» comme une «date et heure» ou vice versa.)


0 commentaires

0
votes
String str = "14:21:16";
DateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 
Date date = formatter.parse(str); 
Timestamp timestamp = new Timestamp(date.getTime());

1 commentaires

Vérifiez ce que system.out.println (horodatage) montre et vous verrez que ce n'est pas la date d'aujourd'hui.



6
votes

Que diriez-vous de cela: xxx

sortie:

2011-03-02 14: 21: 16.0


2 commentaires

+1 sur la base que cela fonctionne, et il semble être facile de trouver des réponses qui ne sont pas pour des raisons pour lesquelles nous ne comprenons pas!


@Tom Yeah, l'API de Java Date est affreux, mais je crois qu'une réponse de travail sans bibliothèques externes est indispensable (même si j'aime mieux la réponse de Jon Skeet)



1
votes

Utilisez org.apache.commons.lang.time.datetutils: xxx


8 commentaires

+1 Pour une manière de Néater d'obtenir la valeur de temps pour le début d'aujourd'hui, bien que cela nécessite org.apache.commons.lang.time.datetutils


Eh bien, vous pouvez aussi faire Long Millistoday = nouvelle date (). Gettime () / 86400000; // 86400000 Le nombre de millisecondes A par jour


Entre, la bibliothèque Apache Commons-Lang fournit tellement d'utilitaires utiles que vous ferez beaucoup plus facilement votre vie lorsque vous l'utilisez.


Cette méthode produite-t-elle réellement la bonne réponse? (original) Je reçois une heure si je l'essaie, et je suis actuellement en GMT. Ne peut pas voir pourquoi en ce moment


Étrangement l'époque pour moi (System.out.println (nouvelle date (0))) retourne 1 heure du matin le 1er janvier 1970 d'où l'heure est ouverte. Est-ce que je manque quelque chose?


Oui, nous avons vécu cela aussi. Pourrait être un problème d'été / hiver.


Pouvez-vous publier des informations sur le fuseau horaire que vous utilisez pour cela?


Je suis en GMT et c'est l'hiver, Java rapporte que le décalage horaire actuel est égal à 0. L'impression de la valeur de la nouvelle date (0) indique 1 heure du 1er janvier 1970 et explicitement GMT. Doit dire que je suis un peu confus par ça.



4
votes

meilleur que je puisse trouver à l'aide de l'API standard n'est pas si jolie: xxx

Notez que java.sql.time.valueof accepte une chaîne de formulaire "HH: MM: SS" comme vous le souhaitez. D'autres formats nécessiteraient une utilisation de SimpleDateDeformat.


2 commentaires

Merci pour votre réponse, j'étais effectivement intéressé par une solution utilisant uniquement l'API standard.


Réponse totalement valide, que ce n'est pas agréable n'est pas votre faute :-) (+1)