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.
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));
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);
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.
Utilisez HH au lieu de hh dans la chaîne de formatage
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 .
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
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
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]
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 );
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
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?
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.
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é.
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);