2009-04-17 4 views
28

J'ai la condition suivante dans le projet.comment convertir la chaîne en format d'heure et ajouter deux heures

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

Merci à l'avance

+5

Mal interprété comme "stardate". Je n'aime même pas * Star Trek. –

Répondre

43

Vous pouvez utiliser SimpleDateFormat pour convertir la chaîne à ce jour. Et après que vous avez deux options,

  • Faire un objet Calendrier et puis de les utiliser pour ajouter deux heures, ou
  • obtenir le temps en milliseconde de cet objet de ce jour, 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 oeil à ces tutoriels.

4

Utiliser la méthode de classe parse()SimpleDateFormat. Cette méthode renvoie un objet Date. Vous pouvez ensuite créer un objet Calendar pour ce 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. 
+0

Je donne le code. s'il vous plaît dites-moi si c'est correct ou non Calendrier EDate = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat ("aaaa-MM-jj hh: mm: ss"); EDate.setTime (sdf.parse (enddate)); EDate.add (Calendar.Hour, 1); – user48094

+0

La chaîne de date que vous avez est-elle AM ​​ou PM? Parce que vous avez utilisé hh minuscule pour l'heure et aussi Calendar.HOUR. Mon code utilisé votre heure est le cycle de 24 heures. –

33

Être un fan de la bibliothèque Joda Time, voici comment vous pouvez le faire de cette façon 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 avez besoin d'utiliser des objets java.util.Date avant/après cette conversion, la Joda DateTime API fournit quelques méthodes simples toDate() et toCalendar() pour une traduction facile.

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

+2

Tout le monde devrait être un fan de Joda. Meilleure bibliothèque que j'ai jamais utilisée. +1 – WolfmanDragon

+0

Je suis totalement d'accord avec Rob Hruska et WolfmanDragon.Cette bibliothèque est tellement simple à utiliser et je recommande également de l'ajouter dans tous les projets Java où la manipulation date/heure est nécessaire (presque tous les projets alors :)) –

+1

et je suis d'accord avec @ruffp, fonctionne à Scala avec des avantages supplémentaires de no parens ;-) – virtualeyes

3
//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); 
4

Essayez celui-ci, je le tester, 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 dans votre type d'entrée que d'ajouter ce code aussi

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 
1

programme de base d'ajouter deux fois:
Vous pouvez modifier l'heure: min: sec selon votre besoin en utilisant si autre chose.
Ce programme vous montre comment vous pouvez ajouter des valeurs à partir de deux objets et revenir dans un autre objet.

class demo 
{private int hour,min,sec; 
    void input(int hour,int min,int sec) 
    {this.hour=hour; 
    this.min=min; 
    this.sec=sec; 

    } 
    demo add(demo d2)//demo because we are returning object 
    { demo obj=new demo(); 
    obj.hour=hour+d2.hour; 
    obj.min=min+d2.min; 
    obj.sec=sec+d2.sec; 
    return obj;//Returning object and later on it gets allocated to demo d3      
    } 
    void display() 
    { 
     System.out.println(hour+":"+min+":"+sec); 
    } 
    public static void main(String args[]) 
    { 
     demo d1=new demo(); 
     demo d2=new demo(); 
     d1.input(2, 5, 10); 
     d2.input(3, 3, 3); 
     demo d3=d1.add(d2);//Note another object is created 
     d3.display(); 


    } 

} 

modifié Temps Addition Programme

class demo {private int hour,min,sec; void input(int hour,int min,int sec) {this.hour=(hour>12&&hour<24)?(hour-12):hour; this.min=(min>60)?0:min; this.sec=(sec>60)?0:sec; } demo add(demo d2) { demo obj=new demo(); obj.hour=hour+d2.hour; obj.min=min+d2.min; obj.sec=sec+d2.sec; if(obj.sec>60) {obj.sec-=60; obj.min++; } if(obj.min>60) { obj.min-=60; obj.hour++; } return obj; } void display() { System.out.println(hour+":"+min+":"+sec); } public static void main(String args[]) { demo d1=new demo(); demo d2=new demo(); d1.input(12, 55, 55); d2.input(12, 7, 6); demo d3=d1.add(d2); d3.display(); } }
1

Cet exemple est une somme du temps et du temps Date Zone (valeurs String)

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 

de Merci :)

0

Cela vous donnera le temps que vous avez nt (par exemple: 21:31 PM)

//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

tl; dr

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

java.time

L'approche moderne utilise le java.time classes ajoutées à Java 8, Java 9, et plus tard.

utilisateur entre dans le format AAAA-MM-JJ HH: MM: SS

Parse cette chaîne d'entrée en un objet DateTime. Votre format est proche de la conformité au format ISO 8601 standard, utilisé par défaut dans les classes java.time pour analyser/générer des chaînes. Pour se conformer pleinement, remplacez l'espace au milieu avec un T.

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

Parse comme LocalDateTime étant donné que votre entrée n'a pas un indicateur de fuseau horaire ou offset de-UTC.

LocalDateTime ldt = LocalDateTime.parse(input) ; 

ajouter deux heures

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

LocalDateTime twoHoursLater = ldt.plusHours(2) ; 

Time Zone

Sachez qu'un LocalDateTime ne fait pas représentent un moment, un point sur la timeline. Sans le contexte d'un fuseau horaire ou offset-from-UTC, il n'a aucune signification réelle. La partie "Local" du nom signifie localité ou localité plutôt qu'une localité particulière. Le simple fait de dire "midi le 21 janvier" pourrait signifier midi à Auckland, en Nouvelle-Zélande, ce qui arrive plusieurs heures avant 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 pour certains, l'appliquer avant d'ajouter les deux heures. La classe LocalDateTime suppose des jours génériques de 24 heures simples lors du calcul. Mais dans divers fuseaux horaires à diverses dates, les jours peuvent être de 23 ou 25 heures, ou peuvent être d'autres longueurs.Ainsi, pour des résultats corrects dans un contexte zoné, ajoutez les heures à votre ZonedDateTime au lieu de LocalDateTime.


A propos java.time

Le cadre java.time est construit en Java 8 et versions ultérieures. Ces classes supplantent les vieilles classes legacy de date-heure gênantes telles que java.util.Date, Calendar, & SimpleDateFormat. Le projet Joda-Time, maintenant en maintenance mode, conseille la migration vers les classes java.time.

Pour en savoir plus, voir le Oracle Tutorial. 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 plus tard
    • intégré.
    • Partie de l'API Java standard avec une implémentation groupée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité de java.time est de retour à Java 6 Ported .
  • Android
    • Les versions ultérieures de mises en œuvre bundle Android des classes java.time.
    • Pour Android plus tôt, le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir How to use ThreeTenABP….

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

Questions connexes