web-dev-qa-db-fra.com

comment convertir une chaîne en format d'heure et ajouter deux heures

J'ai l'exigence suivante dans le projet.

J'ai un champ de saisie avec le nom startDate et l'utilisateur entre au format YYYY-MM-DD HH:MM:SS. Je dois ajouter deux heures pour l'entrée utilisateur dans le champ startDate. Comment puis-je le faire.

Merci d'avance

29
user48094

Vous pouvez utiliser SimpleDateFormat pour convertir la chaîne en date. Et après cela vous avez deux options,

  • Créez un objet Calendrier, puis utilisez-le pour ajouter deux heures ou
  • obtenir le temps en millisecondes à partir de cet objet date et ajouter deux heures comme, (2 * 60 * 60 * 1000)

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    // replace with your start date string
    Date d = df.parse("2008-04-16 00:05:05"); 
    Calendar gc = new GregorianCalendar();
    gc.setTime(d);
    gc.add(Calendar.HOUR, 2);
    Date d2 = gc.getTime();
    

    Ou,

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    // replace with your start date string
    Date d = df.parse("2008-04-16 00:05:05");
    Long time = d.getTime();
    time +=(2*60*60*1000);
    Date d2 = new Date(time);
    

Jetez un coup d'œil à ces tutoriels.

43
Adeel Ansari

En tant que fan de la bibliothèque Joda Time , voici comment procéder de la sorte en utilisant un Joda DateTime :

import org.joda.time.format.*;
import org.joda.time.*;

...    

String dateString = "2009-04-17 10:41:33";

// parse the string
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime = formatter.parseDateTime(dateString);

// add two hours
dateTime = dateTime.plusHours(2); // easier than mucking about with Calendar and constants

System.out.println(dateTime);

Si vous devez toujours utiliser des objets Java.util.Date avant/après cette conversion, l'API Joda DateTime fournit des méthodes faciles toDate() et toCalendar() pour faciliter la traduction.

L'API Joda fournit beaucoup plus de commodité par rapport à l'API Java Date/Calendrier.

33
Rob Hruska

Utilisez la méthode SimpleDateFormat class parse(). Cette méthode renverra un objet Date. Vous pouvez ensuite créer un objet Calendar pour cette Date et lui ajouter 2 heures.

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatter.parse(theDateToParse);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, 2);
cal.getTime(); // This will give you the time you want.
4
Bhushan Bhangale

Essayez celui-ci, je le teste, fonctionne bien

Date date = null;
String str = "2012/07/25 12:00:00";
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
date = formatter.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR, 2);
System.out.println(calendar.getTime());  // Output : Wed Jul 25 14:00:00 IST 2012

Si vous voulez convertir votre type d’entrée, ajoutez ce code également

formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
str=formatter.format(calendar.getTime());
System.out.println(str);  // Output : 2012-07-25 14:00:00
4
Lalit Bhudiya
//the parsed time zone offset:
DateTimeFormatter dateFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
String fromDateTimeObj = "2011-01-03T12:00:00.000-0800";
DateTime fromDatetime = dateFormat.withOffsetParsed().parseDateTime(fromDateTimeObj);
3
Amit Kushwaha

Cet exemple est une somme pour l'heure, la date et le fuseau horaire (valeurs de chaîne)

String DateVal = "2015-03-26 12:00:00";
String TimeVal = "02:00:00";

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss");

Date reslt = sdf.parse( DateVal );
Date timeZ = sdf2.parse( TimeVal );
//Increase Date Time
reslt.setHours( reslt.getHours() + timeZ.getHours());
reslt.setMinutes( reslt.getMinutes() + timeZ.getMinutes());
reslt.setSeconds( reslt.getSeconds() + timeZ.getSeconds());

System.printLn.out( sdf.format(reslt) );//Result(+2 Hours):  2015-03-26 14:00:00 

Merci :)

1
Ferhat KOÇER

tl; dr

LocalDateTime.parse( 
    "2018-01-23 01:23:45".replace( " " , "T" )  
).plusHours( 2 )

Java.time

L'approche moderne utilise les classes Java.time ajoutées à Java 8, Java 9 et versions ultérieures.

l'utilisateur entre au format AAAA-MM-JJ HH: MM: SS

Analyser cette chaîne d'entrée dans un objet date-heure. Votre format est presque conforme au format standard ISO 8601, utilisé par défaut dans les classes Java.time pour l'analyse/la génération de chaînes. Pour se conformer pleinement, remplacez l’ESPACE au milieu par T.

String input = "2018-01-23 01:23:45".replace( " " , "T" ) ; // Yields: 2018-01-23T01:23:45

Analysez comme LocalDateTime étant donné que votre entrée ne contient aucun indicateur de fuseau horaire ou de décalage par rapport à UTC.

LocalDateTime ldt = LocalDateTime.parse( input ) ;

ajouter deux heures

Les classes Java.time peuvent faire le calcul pour vous.

LocalDateTime twoHoursLater = ldt.plusHours( 2 ) ;

Fuseau horaire

Sachez qu'un LocalDateTime ne pas représente un moment, un point sur la timeline. Sans le contexte d'un fuseau horaire ou d'un décalage par rapport à UTC, cela n'a pas de véritable sens. La partie «locale» du nom signifie toute localité ou non localité, plutôt qu’une localité en particulier. Le simple fait de dire "midi le 21 janvier" pourrait signifier midi à Auckland, en Nouvelle-Zélande, ce qui se produit plusieurs heures plus tôt que midi à Paris, en France.

Pour définir un moment réel, vous devez spécifier une zone ou un décalage. 

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;  // Define an actual moment, a point on the timeline by giving a context with time zone.

Si vous connaissez le fuseau horaire prévu avec certitude, appliquez-le avant d'ajouter en ajoutant les deux heures. La classe LocalDateTime suppose de simples jours génériques de 24 heures pour effectuer le calcul. Mais dans différents fuseaux horaires et à différentes dates, les jours peuvent durer 23 ou 25 heures, ou d’autres durées. Par conséquent, pour obtenir des résultats corrects dans un contexte de zone, ajoutez les heures à votre ZonedDateTime plutôt qu'à LocalDateTime


À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes problématiques héritées _ date-heure telles que Java.util.Date , Calendar _, & SimpleDateFormat .

Le projet Joda-Time , désormais en mode maintenance , conseille de migrer 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 310 .

Où obtenir les classes Java.time? 

  • Java SE 8 , Java SE 9 et versions ultérieures
    • Intégré. 
    • Une partie de l'API Java standard avec une implémentation fournie.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité Java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Les versions ultérieures d'Android regroupent des implémentations des classes Java.time.
    • Pour les versions antérieures d'Android, le projet ThreeTenABP s'adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .

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 _.

0
Basil Bourque

Cela vous donnera le temps que vous voulez (par exemple: 21h31)

//Add 2 Hours to just TIME
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss a");
Date date2 = formatter.parse("19:31:51 PM");
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
cal2.add(Calendar.HOUR_OF_DAY, 2);
SimpleDateFormat printTimeFormat = new SimpleDateFormat("HH:mm a");
System.out.println(printTimeFormat.format(cal2.getTime())); 
0
bnhs