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
Vous pouvez utiliser SimpleDateFormat pour convertir la chaîne en date. Et après cela vous avez deux options,
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.
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.
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.
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
//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);
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 :)
LocalDateTime.parse(
"2018-01-23 01:23:45".replace( " " , "T" )
).plusHours( 2 )
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 ) ;
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
.
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?
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 _.
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()));