web-dev-qa-db-fra.com

Java Objet Chaîne vers date du format "aaaa-mm-jj HH: mm: ss"

J'ai besoin de convertir une chaîne contenant une date en un objet de date. La chaîne sera au format "aaaa-mm-jj HH: mm: ss.SSSSSS" et je veux le même format dans un objet de date.

Par exemple, j'ai une chaîne "2012-07-10 14: 58: 00.000000" et j'ai besoin que l'objet de date résultant ait le même format.

J'ai essayé les méthodes ci-dessous, mais le résultat n'est pas celui attendu.

Java.util.Date temp = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss.SSSSSS").parse("2012-07-10 14:58:00.000000");

DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
                Date thisDate = dateFormat.parse("2012-07-10 14:58:00.000000");

Le résultat est "mar 10 jan 14:58:00 EST 2012". S'il vous plaît laissez-moi savoir où je vais mal.

Merci, Yeshwanth Kota

23
Yeshwanth Kota
Java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").parse("2012-07-10 14:58:00.000000");

Les mm sont les minutes que vous voulez MM

CODE

public class Test {

    public static void main(String[] args) throws ParseException {
        Java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS")
                .parse("2012-07-10 14:58:00.000000");
        System.out.println(temp);
    }
}

Impressions:

Mar. Juil. 10 14:58:00 HAE 2012

49
Woot4Moo

Pour référence future:

 yyyy => 4 digit year
 MM   => 2 digit month (you must type MM in ALL CAPS)
 dd   => 2 digit "day of the month"

 HH   => 2-digit "hour in day" (0 to 23)
 mm   => 2-digit minute (you must type mm in lowercase)
 ss   => 2-digit seconds
 SSS  => milliseconds

Donc, "aaaa-MM-jj HH: mm: ss" renvoie "2018-01-05 09:49:32"

Mais "MMM jj, aaaa hh: mm a" retourne "le 5 janvier 2018 à 09h49"

Les soi-disant exemples sur https://docs.Oracle.com/javase/7/docs/api/Java/text/SimpleDateFormat.html affichent uniquement la sortie. Ils ne vous disent pas quels formats utiliser!

3
Ed Poor

Votre formateur Date ne s'applique pas. vous analysez plutôt la date. pour obtenir une sortie dans ce format

yyyy-MM-dd HH:mm:ss.SSSSSS

nous devons utiliser la méthode format () voici un exemple complet: - Voici un exemple complet: - cela prendra Date dans ce format yyyy-MM-dd HH:mm:ss.SSSSSS et comme résultat, nous obtiendrons une sortie identique à ce format yyyy-MM-dd HH:mm:ss.SSSSSS

 import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.Date;

//TODO OutPut should LIKE in this format yyyy-MM-dd HH:mm:ss.SSSSSS.
public class TestDateExample {

public static void main(String args[]) throws ParseException {

    SimpleDateFormat changeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");

    Java.util.Date temp = changeFormat.parse("2012-07-10 14:58:00.000000");
     Date thisDate = changeFormat.parse("2012-07-10 14:58:00.000000");  
    System.out.println(thisDate);
    System.out.println("----------------------------"); 
    System.out.println("After applying formating :");
    String strDateOutput = changeFormat.format(temp);
    System.out.println(strDateOutput);

}

}

Working example screen

1
Vipul Gulhane

tl; dr

LocalDateTime.parse( 
    "2012-07-10 14:58:00.000000".replace( " " , "T" )  
)

Les microsecondes ne correspondent pas

Vous tentez de compresser une valeur avec des microsecondes (six chiffres décimaux) dans un type de données ne prenant en charge que la résolution en millisecondes (trois chiffres décimaux). C'est impossible.

Utilisez plutôt un type de données avec une résolution suffisamment fine. Les classes Java.time utilisent une résolution en nanosecondes (neuf chiffres décimaux).

L'entrée Unzoned ne correspond pas à un type zoné

Vous essayez de placer une valeur dépourvue de décalage horaire par rapport à UTC ou de fuseau horaire dans un type de données (Date) ne représentant que des valeurs en UTC. Vous ajoutez donc des informations (décalage UTC) non prévues par l'entrée.

Utilisez plutôt un type de données approprié. Plus précisément, Java.time.LocalDateTime .

Sensible aux majuscules et minuscules

Autres réponses et commentaires expliquent correctement que les codes de modèle de formatage sont sensibles à la casse. Donc, MM et mm ont des effets différents.

Évitez les classes héritées

Les anciennes classes de date-heure problématiques regroupées avec les versions les plus anciennes de Java sont maintenant héritées, supplantées par les classes Java.time intégrées à Java 8 et versions ultérieures.).

ISO 8601

Vos chaînes d’entrée sont presque conformes aux formats standard ISO 8601. Remplacez l’ESPACE au milieu par un T pour vous conformer pleinement.

Les classes Java.time utilisent les formats standard par défaut lors de l'analyse/génération de chaînes. Donc, pas besoin de spécifier un modèle de formatage.

Les objets date-heure n'ont pas de "format"

et j'ai besoin que l'objet de date résultant soit du même format.

Non, les objets date-heure n'ont pas de "format". Ne confondez pas les objets date-heure avec de simples chaînes. Les chaînes sont des entrées et des sorties des objets. Les objets conservent leurs propres représentations internes des informations date-heure, dont les détails ne nous concernent pas en tant que programmeurs appelants.

Java.time

Votre entrée ne contient aucun indicateur de décalage par rapport à UTC ou de zone gênante. Nous analysons donc comme un objet LocalDateTime auquel il manque ces concepts.

String input = "2012-07-10 14:58:00.000000".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input ) ;

Générer des chaînes

Pour générer une chaîne représentant la valeur de votre LocalDateTime:

  • Appelez toString pour obtenir une chaîne au format standard ISO 8601.
  • Utilisez DateTimeFormatter pour produire des chaînes dans des formats personnalisés ou automatiquement formatés.

Recherchez le débordement de pile pour plus d’informations car ces sujets ont déjà été abordés à maintes reprises.

ZonedDateTime

Un LocalDateTime ne pas représente un point exact sur la timeline.

Pour déterminer un moment réel, attribuez un fuseau horaire. Par exemple, midi à Calcutta, l'Inde arrive beaucoup plus tôt que midi à Paris, en France. Il se peut que midi sans fuseau horaire se produise entre 26 et 27 heures.

ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;

À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent l'ancien problème (ancien) hérité classes date-heure telles que Java.util.Date , Calendar , & SimpleDateFormat .

Le projet Joda-Time , maintenant en mode de maintenance , conseille la migration vers les classes Java.time .

Pour en savoir plus, consultez le Tutoriel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 31 .

Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou une version ultérieure. Pas besoin de chaînes, pas besoin de Java.sql.* Des classes.

Où obtenir les classes Java.time?

Le projet ThreeTen-Extra étend Java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à Java.time. Vous pouvez trouver ici quelques classes utiles telles que Interval , YearWeek , YearQuarter , et plus .

1
Basil Bourque

son travail pour moi SimpleDateFormat sdf = new SimpleDateFormat ("aaaa-MM-jj HH: mm: ss"); sdf.format (nouvelle date));

0
Avinash Khadsan