Je veux que les heures et les minutes commencent à partir de la date du 10 octobre 2016
package com.mkyong.date;
import Java.text.SimpleDateFormat;
import Java.util.Date;
public class DateDifferentExample
{
public static void main(String[] args)
{
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//get current date time with Date()
Date date = new Date();
System.out.println(dateFormat.format(date));
//get current date time with Calendar()
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
String dateStart = "01/14/2012 09:29:58";
String dateStop = "01/15/2012 10:31:48";
//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date d1 = null;
Date d2 = null;
try
{
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
//in milliseconds
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.print(diffDays + " days, ");
System.out.print(diffHours + " hours, ");
System.out.print(diffMinutes + " minutes, ");
System.out.print(diffSeconds + " seconds.");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Résultats :
2016/08/15 18:54:03
2016/08/15 18:54:03
1097 Days1 Hours 1 Minute 50 Second
My want to result for example :
100 days 5 hours 2 minutes
Vous utilisez d'anciennes classes de date et d'heure problématiques associées aux versions les plus anciennes de Java. Utilisez plutôt les classes Java.time.
Vos chaînes d’entrée sont presque au format ISO 8601. Remplacez l’ESPACE au milieu par un T
. Les classes Java.time analysent/génèrent des chaînes aux formats ISO 8601 par défaut. Donc, pas besoin de spécifier un modèle de formatage.
String startInput = "01/14/2012 09:29:58".replace( " " , "T" );
String stopInput = "01/15/2012 10:31:48".replace( " " , "T" );
LocalDateTime
Vos entrées ne contiennent aucune information sur le décalage par rapport à UTC ou le fuseau horaire. Nous analysons donc comme objets LocalDateTime
.
LocalDateTime startLdt = LocalDateTime.parse( startInput );
LocalDateTime stopLdt = LocalDateTime.parse( stopInput );
Si vous travaillez davantage avec ces types, vous obtiendrez des résultats basés sur des jours génériques de 24 heures tout en ignorant les anomalies telles que l'heure d'été (DST).
Si vous savez que le contexte de ces données correspond à un fuseau horaire particulier, appliquez-le pour obtenir ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime start = startLdt.atZone( zoneId );
ZonedDateTime stop = stopLdt.atZone( zoneId );
Si vous voulez que le moment actuel soit le début ou la fin, appelez now
. Passez le fuseau horaire souhaité/attendu plutôt que de s’appuyer sur le fuseau horaire par défaut de la machine virtuelle Java.
ZonedDateTime now = ZonedDateTime.now( zoneId );
La classe Duration
représente une période de temps sous la forme d'un total de secondes plus une fraction de seconde avec une résolution en nanosecondes.
Duration duration = Duration.between( start , stop );
Bizarrement, en Java 8, cette classe manque de méthodes pour obtenir le nombre de jours, d’heures, etc. constituant cette période. Java 9 ajoute les méthodes to…Part
.
long days = duration.toDaysPart();
int hours = duration.toHoursPart();
int minutes = duration.toMinutesPart();
Jusqu'à Java 9, vous pouvez faire le calcul vous-même.
La structure Java.time est intégrée à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes de date-heure, telles que Java.util.Date
, .Calendar
et Java.text.SimpleDateFormat
.
Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers Java.time.
Pour en savoir plus, voir le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications.
Une grande partie de la fonctionnalité Java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport , puis adaptée à Android dans 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 y trouver des classes utiles telles que Interval
, YearWeek
, YearQuarter
et plus.
public final void set (int year, int month, int date) - cette méthode de la classe Calendar peut être utilisée pour définir la date.
public final void set (int year, int month, int date, int hourOfDay, int minute, int seconde) peut également être utilisé pour régler l'heure.
Calendar.getInstance () par défaut, définit la date et l'heure actuelles.