web-dev-qa-db-fra.com

Comment définir le format 24 heures pour la date sur Java?

J'ai développé une application Android où j'utilise ce code:

Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy hh:mm:ss").format(d);

J'ai besoin d'obtenir la date après 8 heures à partir du moment actuel, et je veux que cette date ait un format de 24 heures, mais je ne sais pas comment je peux la faire par SimpleDateFormat. J'ai également besoin que cette date soit DD/MM/YYYY HH:MM:SS format.

29
user1134602

Cela vous donnera la date au format 24 heures.

    Date date = new Date();
    date.setHours(date.getHours() + 8);
    System.out.println(date);
    SimpleDateFormat simpDate;
    simpDate = new SimpleDateFormat("kk:mm:ss");
    System.out.println(simpDate.format(date));
56
vikiiii

pour le format 12 heures:

SimpleDateFormat simpleDateFormatArrivals = new SimpleDateFormat("hh:mm", Locale.UK);

pour le format 24 heures:

SimpleDateFormat simpleDateFormatArrivals = new SimpleDateFormat("HH:mm", Locale.UK);
58
Tim Kruichkov
Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(d);

HH retournera 0-23 pendant des heures.

kk retournera 1-24 pendant des heures.

Voir plus ici: Personnalisation des formats

utilisez la méthode setIs24HourView (Boolean is24HourView) pour définir le sélecteur d'heure pour définir la vue sur 24 heures.

13
jeet

Utilisez HH au lieu de hh dans la chaîne de formatage

7
Vikram

Essayez le code ci-dessous

    String dateStr = "Jul 27, 2011 8:35:29 PM";
    DateFormat readFormat = new SimpleDateFormat( "MMM dd, yyyy hh:mm:ss aa");
    DateFormat writeFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
    Date date = null;
    try {
       date = readFormat.parse( dateStr );
    } catch ( ParseException e ) {
        e.printStackTrace();
    }

    String formattedDate = "";
    if( date != null ) {
    formattedDate = writeFormat.format( date );
    }

    System.out.println(formattedDate);

Bonne chance!!!

Vérifiez divers formats .

4
Fahim Parkar

tl; dr

L'approche moderne utilise les classes Java.time.

Instant.now()                                        // Capture current moment in UTC.
       .truncatedTo( ChronoUnit.SECONDS )            // Lop off any fractional second.
       .plus( 8 , ChronoUnit.HOURS )                 // Add eight hours.
       .atZone( ZoneId.of( "America/Montreal" ) )    // Adjust from UTC to the wall-clock time used by the people of a certain region (a time zone). Returns a `ZonedDateTime` object.
       .format(                                      // Generate a `String` object representing textually the value of the `ZonedDateTime` object.
           DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
                            .withLocale( Locale.US ) // Specify a `Locale` to determine the human language and cultural norms used in localizing the text being generated. 
       )                                             // Returns a `String` object.

23/01/2017 15:34:56

Java.time

Pour info, les anciennes classes Calendar et Date sont maintenant legacy . Supplanté par les classes Java.time . Une grande partie de Java.time est rétroportée vers Java 6, Java 7 et Android (voir ci-dessous).

Instant

Capturez l'instant actuel en UTC avec la classe Instant.

Instant instantNow = Instant.now();

instant.toString (): 2017-01-23T12: 34: 56.789Z

Si vous ne voulez que des secondes entières, sans fraction de seconde, tronquez.

Instant instant = instantNow.truncatedTo( ChronoUnit.SECONDS );

instant.toString (): 2017-01-23T12: 34: 56Z

Math

La classe Instant peut faire des calculs, ajoutant un certain temps. Spécifiez le temps à ajouter par l'énumération ChronoUnit , une implémentation de TemporalUnit .

instant = instant.plus( 8 , ChronoUnit.HOURS );

instant.toString (): 2017-01-23T20: 34: 56Z

ZonedDateTime

Pour voir ce même moment à travers l'objectif de l'heure d'une horloge murale d'une région particulière, appliquez un ZoneId pour obtenir un ZonedDateTime .

Spécifiez un nom de fuseau horaire correct au format continent/region, tel que America/Montreal , Africa/Casablanca ou Pacific/Auckland. N'utilisez jamais l'abréviation de 3-4 lettres telle que EST ou IST car ils sont pas vrais fuseaux horaires, non standardisés, ni même uniques (!) .

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

zdt.toString (): 2017-01-23T15: 34: 56-05: 00 [Amérique/Montréal]

Générer une chaîne

Vous pouvez générer une chaîne au format souhaité en spécifiant un modèle de mise en forme dans un objet DateTimeFormatter.

Notez que la casse compte dans les lettres de votre modèle de formatage. Le code de la question avait hh qui correspond à 12 heures tandis que les majuscules HH correspondent à 24 heures (0-23) dans les deux Java.time.DateTimeFormatter ainsi que l'héritage Java.text.SimpleDateFormat.

Les codes de formatage dans Java.time sont similaires à ceux de l'héritage SimpleDateFormat mais pas exactement les mêmes. Étudiez attentivement le doc de classe. Ici, HH fonctionne de manière identique.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ).withLocale( Locale.US );
String output = zdt.format( f );

Localisation automatique

Plutôt que de coder en dur un modèle de formatage, pensez à laisser Java.time localiser complètement la génération du texte String en appelant DateTimeFormatter.ofLocalizedDateTime .

Et, soit dit en passant, sachez que le fuseau horaire et Locale ont rien à faire l'un avec l'autre; problèmes orthogonaux. L'un concerne environ contenu, la signification (l'heure de l'horloge murale). L'autre concerne présentation, déterminant le langage humain et les normes culturelles utilisées pour présenter ce sens à l'utilisateur.

Instant instant = Instant.parse( "2017-01-23T12:34:56Z" );
ZoneId z = ZoneId.of( "Pacific/Auckland" );  // Notice that time zone is unrelated to the `Locale` used in localizing.
ZonedDateTime zdt = instant.atZone( z );

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL )
                                       .withLocale( Locale.CANADA_FRENCH );  // The locale determines human language and cultural norms used in generating the text representing this date-time object.
String output = zdt.format( f );

instant.toString (): 2017-01-23T12: 34: 56Z

zdt.toString (): 2017-01-24T01: 34: 56 + 13: 00 [Pacifique/Auckland]

sortie: mardi 24 janvier 2017 à 01:34:56 heure avancée de la Nouvelle-Zélande


À propos de Java.time

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

Le projet Joda-Time , maintenant en mode 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 version ultérieure. Pas besoin de chaînes, pas besoin de Java.sql.* Des classes.

Où obtenir les classes Java.time?


Joda-Time

Mise à jour: Le projet Joda-Time est maintenant en mode maintenance , l'équipe conseillant la migration vers les classes Java.time .

Joda-Time facilite ce genre de travail.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

DateTime later = DateTime.now().plusHours( 8 );
DateTimeFormatter formatter = DateTimeFormat.forPattern( "dd/MM/yyyy HH:mm:ss" );
String laterAsText = formatter.print( later );

System.out.println( "laterAsText: " + laterAsText );

Lors de l'exécution ...

laterAsText: 19/12/2013 02:50:18

Attention, cette syntaxe utilise le fuseau horaire par défaut . Une meilleure pratique consiste à utiliser une instance DateTimeZone explicite.

2
Basil Bourque

Vous pouvez le faire comme ceci:

Date d=new Date(new Date().getTime()+28800000);
String s=new SimpleDateFormat("dd/MM/yyyy kk:mm:ss").format(d);

ici 'kk: mm: ss' est la bonne réponse, je l'ai confondu avec la base de données Oracle, désolé.

0
xuanyuanzhiyuan

Essaye ça...

Calendar calendar = Calendar.getInstance();
String currentDate24Hrs = (String) DateFormat.format(
            "MM/dd/yyyy kk:mm:ss", calendar.getTime());
Log.i("DEBUG_TAG", "24Hrs format date: " + currentDate24Hrs);
0