Bir Date nesnesine n saati nasıl eklerim? StackOverflow gün kullanarak başka bir örnek buldum, ama yine de nasıl saat ile yapmak anlamıyorum.
Bir Date nesnesine n saati nasıl eklerim? StackOverflow gün kullanarak başka bir örnek buldum, ama yine de nasıl saat ile yapmak anlamıyorum.
Yanıtlar:
Takvim sınıfını kontrol edin. Bu sahip add
zaman işleme izin vermek için bir yöntem (ve diğerleri). Böyle bir şey işe yaramalı.
Calendar cal = Calendar.getInstance(); // creates calendar
cal.setTime(new Date()); // sets calendar time/date
cal.add(Calendar.HOUR_OF_DAY, 1); // adds one hour
cal.getTime(); // returns new date object, one hour in the future
Daha fazla bilgi için API'yı kontrol edin .
Calendar.add()
bunu otomatik olarak halleder.
java.util.Date
, java.util.Calendar
ve java.text.SimpleDateFormat
şimdi mirası supplanted, java.time Java 8 ve Java 9. Bkz yerleşik sınıflara Öğreticisi Oracle tarafından .
Eğer kullanırsan Apache Commons / Lang , kullandığınız tek adımda bunu yapabilirsiniz DateUtils.addHours()
:
Date newDate = DateUtils.addHours(oldDate, 3);
(Orijinal nesne değişmez)
DateUtils.addHours(oldDate, -1);
Christopher örneğini basitleştirmek için.
Sabitin olduğunu söyle
public static final long HOUR = 3600*1000; // in milli-seconds.
Yazabilirsin.
Date newDate = new Date(oldDate.getTime() + 2 * HOUR);
Date nesnesi yerine tarih / saat depolamak için uzun kullanırsanız,
long newDate = oldDate + 2 * HOUR;
myJavaUtilDate.toInstant()
.plusHours( 8 )
Veya…
myJavaUtilDate.toInstant() // Convert from legacy class to modern class, an `Instant`, a point on the timeline in UTC with resolution of nanoseconds.
.plus( // Do the math, adding a span of time to our moment, our `Instant`.
Duration.ofHours( 8 ) // Specify a span of time unattached to the timeline.
) // Returns another `Instant`. Using immutable objects creates a new instance while leaving the original intact.
Java 8 ve sonraki sürümlerinde yerleşik java.time çerçevesi eski Java.util.Date/.Calendar sınıflarını tamamlar. Bu eski sınıflar çok zahmetlidir. Onlardan kaçının.
toInstant
Eski türden yeni java.time türüne dönüştürmek için java.util.Date'e yeni eklenen yöntemi kullanın . Bir Instant
de zaman tablosunda bir andır UTC çözünürlüğe sahip nanosaniye .
Instant instant = myUtilDate.toInstant();
Bunu saat ekleyebilir Instant
bir ileterek TemporalAmount
gibi Duration
.
Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );
Bu tarih saatini okumak için arayarak standart ISO 8601 biçiminde bir Dize oluşturun toString
.
String output = instantHourLater.toString();
O anı bir bölgenin duvar saati zamanının merceğinden görmek isteyebilirsiniz . A Instant
oluşturarak istediğiniz / beklenen zaman dilimine ayarlayın ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Alternatif olarak, plusHours
saat sayınızı eklemek için arayabilirsiniz . İmar edilmiş olmak, Yaz Saati Uygulaması (DST) ve diğer anormalliklerin sizin adınıza ele alınacağı anlamına gelir.
ZonedDateTime later = zdt.plusHours( 8 );
java.util.Date
Ve dahil olmak üzere eski tarih-saat sınıflarını kullanmaktan kaçınmalısınız .Calendar
. Ancak java.util.Date
, java.time türleri için henüz güncellenmemiş sınıflarla birlikte çalışabilirlik için gerçekten ihtiyacınız varsa , ZonedDateTime
aracılığıyla dönüştürün Instant
. Eski sınıflara eklenen yeni yöntemler, java.time türlerine / türlerinden dönüştürmeyi kolaylaştırır.
java.util.Date date = java.util.Date.from( later.toInstant() );
Dönüştürme konusunda daha fazla tartışma için, bkz benim cevap , soru neyi “java.time” türüne java.util.Date dönüştürme? .
Java.time çerçevesi daha sonra Java 8 ve yerleşiktir. Bu sınıflar zahmetli eski yerini mirası gibi tarih-saat sınıfları java.util.Date
, Calendar
& SimpleDateFormat
.
Artık bakım modunda olan Joda-Time projesi java.time sınıflarına geçişi tavsiye ediyor .
Daha fazla bilgi için Oracle Eğiticisine bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Özellikler JSR 310 .
Sen değiştirebilir java.time sizin veritabanı ile doğrudan nesneleri. JDBC 4.2 veya sonraki bir sürümüyle uyumlu bir JDBC sürücüsü kullanın . Dizeye gerek yok, gerek yokjava.sql.*
sınıflara .
Java.time sınıflarını nereden edinebilirsiniz?
ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time'a gelecekteki olası eklemeler için bir kanıt zeminidir. Burada bazı yararlı sınıfları gibi bulabilir Interval
, YearWeek
, YearQuarter
, ve daha .
İle Joda-Time
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
ClassNotDefinedException
ZonedDateTime
yerine bir gitmelisin LocalDateTime
. "Yerel" aracı değil herhangi bir mekana bağlı ve değil zaman çizelgesine bağladılar. "Noel 25 Aralık 2015 gece yarısında başlar" gibi, zaman diliminde belirli bir anı almak için belirli bir zaman dilimi uygulayana kadar hiçbir anlamı olmayan çeşitli zaman dilimleri arasında farklı bir andır. Ayrıca, saat dilimi olmadan Yaz Saati Uygulaması (DST) ve diğer anormallikler LocalDateTime'ın bu şekilde kullanılmasıyla ele alınmayacaktır. Karşılaştırma ile cevabımı görün .
java.util.Date
istekte bulunan bir nesneyi almak için bize sordu ZonedDateTime.toInstant()
ve Date.from()
burada açıklandığı gibi stackoverflow.com/a/32274725/5661065
Newish java.util.concurrent.TimeUnit sınıfını kullanarak bunu şöyle yapabilirsiniz
Date oldDate = new Date(); // oldDate == current time
Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours
Gibi bir şey:
Date oldDate = new Date(); // oldDate == current time
final long hoursInMillis = 60L * 60L * 1000L;
Date newDate = new Date(oldDate().getTime() +
(2L * hoursInMillis)); // Adds 2 hours
java.util.Date
, java.util.Calendar
ve java.text.SimpleDateFormat
şimdi mirası supplanted, java.time Java 8 ve Java 9. Bkz yerleşik sınıflara Öğreticisi Oracle tarafından .
Bu, Date
nesneniz Tarih / Saat biçiminde olduğunda başka bir kod parçasıdır . Bu kodun güzelliği, daha fazla saat verirseniz, tarih de buna göre güncellenir.
String myString = "09:00 12/12/2014";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy");
Date myDateTime = null;
//Parse your string to SimpleDateFormat
try
{
myDateTime = simpleDateFormat.parse(myString);
}
catch (ParseException e)
{
e.printStackTrace();
}
System.out.println("This is the Actual Date:"+myDateTime);
Calendar cal = new GregorianCalendar();
cal.setTime(myDateTime);
//Adding 21 Hours to your Date
cal.add(Calendar.HOUR_OF_DAY, 21);
System.out.println("This is Hours Added Date:"+cal.getTime());
İşte Çıktı:
This is the Actual Date:Fri Dec 12 09:00:00 EST 2014
This is Hours Added Date:Sat Dec 13 06:00:00 EST 2014
Date argDate = new Date(); //set your date.
String argTime = "09:00"; //9 AM - 24 hour format :- Set your time.
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
String dateTime = sdf.format(argDate) + " " + argTime;
Date requiredDate = dateFormat.parse(dateTime);
Kullanmak istiyorsanız java.time
, ISO 8601 biçimli süreleri eklemek için bir yöntem aşağıdadır:
import java.time.Duration;
import java.time.LocalDateTime;
...
LocalDateTime yourDate = ...
...
// Adds 1 hour to your date.
yourDate = yourDate.plus(Duration.parse("PT1H")); // Java.
// OR
yourDate = yourDate + Duration.parse("PT1H"); // Groovy.
Duration.parse(iso8601duration)
ilginç, teşekkürler, ancak +
üzerinde operatörü kullanamazsınız LocalDateTime
, bunu düzenlemek isteyebilirsiniz. Ama .plus(...)
işe yarıyor.
Date
UTC'de belirli bir anı temsil eden bir nesne hakkındadır . Kullanımınız LocalDateTime
Soruyu ele almamaktadır. LocalDateTime
herhangi bir saat dilimi veya UTC'den ofset kavramına sahip değildir ve bu nedenle bir anı temsil edemez. Bu sorun için yanlış sınıf. Bkz. Instant ve LocalDateTime arasındaki fark nedir?
Date
nesnesi kullanımdan kaldırıldı. Zaman dilimi söz konusu olduğunda soru belirsiz, bu yüzden cevaplarım duruyor. Ayrıca, sadece dışarı takas olabilir LocalDateTime
için ZonedDateTime
.
Joda DateTime API ile yapabilirsiniz
DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
Java 8 sınıflarını kullanarak. tarih ve saati aşağıdaki gibi kolayca değiştirebiliriz.
LocalDateTime today = LocalDateTime.now();
LocalDateTime minusHours = today.minusHours(24);
LocalDateTime minusMinutes = minusHours.minusMinutes(30);
LocalDate localDate = LocalDate.from(minusMinutes);
Date
UTC'de belirli bir anı temsil eden bir nesne hakkındadır . Kullanımınız LocalDateTime
Soruyu ele almamaktadır. LocalDateTime
herhangi bir saat dilimi veya UTC'den ofset kavramına sahip değildir ve bu nedenle bir anı temsil edemez. Bu sorun için yanlış sınıf. Bkz. Instant ve LocalDateTime arasındaki fark nedir?
Java 8'den LocalDateTime sınıfını kullanabilirsiniz. Örneğin:
long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));
Date
UTC'de belirli bir anı temsil eden bir nesne hakkındadır . Kullanımınız LocalDateTime
Soruyu ele almamaktadır. LocalDateTime
herhangi bir saat dilimi veya UTC'den ofset kavramına sahip değildir ve bu nedenle bir anı temsil edemez. Bu sorun için yanlış sınıf. Bkz. Instant ve LocalDateTime arasındaki fark nedir?
Bu yöntemi kullanabilirsiniz, Anlamak ve uygulamak kolaydır:
public static java.util.Date AddingHHMMSSToDate(java.util.Date date, int nombreHeure, int nombreMinute, int nombreSeconde) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, nombreHeure);
calendar.add(Calendar.MINUTE, nombreMinute);
calendar.add(Calendar.SECOND, nombreSeconde);
return calendar.getTime();
}