मैं दिनांक ऑब्जेक्ट में n घंटे कैसे जोड़ूं? मुझे StackOverflow पर दिनों का उपयोग करते हुए एक और उदाहरण मिला, लेकिन फिर भी समझ में नहीं आता कि इसे घंटों के साथ कैसे किया जाए।
मैं दिनांक ऑब्जेक्ट में n घंटे कैसे जोड़ूं? मुझे StackOverflow पर दिनों का उपयोग करते हुए एक और उदाहरण मिला, लेकिन फिर भी समझ में नहीं आता कि इसे घंटों के साथ कैसे किया जाए।
जवाबों:
कैलेंडर वर्ग की जाँच करें। addसमय में हेरफेर करने की अनुमति देने के लिए इसकी विधि (और कुछ अन्य) हैं। कुछ इस तरह से काम करना चाहिए।
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
अधिक के लिए एपीआई की जाँच करें ।
Calendar.add()स्वतः इसका ध्यान रखा जाता है।
java.util.Date, java.util.Calendarऔर java.text.SimpleDateFormatअब विरासत है , जावा 8 और जावा 9 में निर्मित जावा.टाइम क्लासेज द्वारा सप्लीमेंट किया गया है । Oracle द्वारा ट्यूटोरियल देखें ।
यदि आप Apache Commons / Lang का उपयोग करते हैं , तो आप इसका उपयोग करके एक चरण में कर सकते हैं DateUtils.addHours():
Date newDate = DateUtils.addHours(oldDate, 3);
(मूल वस्तु अपरिवर्तित है)
DateUtils.addHours(oldDate, -1);
@ क्रिस्टोफर के उदाहरण को सरल बनाने के लिए।
कहो कि आपके पास एक स्थिरांक है
public static final long HOUR = 3600*1000; // in milli-seconds.
तुम लिख सकते हो।
Date newDate = new Date(oldDate.getTime() + 2 * HOUR);
यदि आप डेट ऑब्जेक्ट के बजाय डेट / टाइम को स्टोर करने के लिए लंबे समय का उपयोग करते हैं तो आप कर सकते हैं
long newDate = oldDate + 2 * HOUR;
myJavaUtilDate.toInstant()
.plusHours( 8 )
या ...
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.
जावा 8 में निर्मित java.time फ्रेमवर्क और बाद में पुराने Java.util.Date/.Calendar क्लासेस को दबा देता है। वे पुराने वर्ग कुख्यात हैं। इनसे बचें।
toInstantJava.util में नए जोड़े गए तरीके का उपयोग करें। पुराने प्रकार से नए java.time प्रकार में बदलने के लिए। एक Instantमें समय रेखा पर एक पल है यूटीसी के एक संकल्प के साथ नैनोसेकंड ।
Instant instant = myUtilDate.toInstant();
आप इस तरह Instantसे पास करके घंटों को जोड़ सकते हैं ।TemporalAmountDuration
Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );
उस दिनांक-समय को पढ़ने के लिए, मानक ISO 8601 प्रारूप में कॉल करके स्ट्रिंग उत्पन्न करें toString।
String output = instantHourLater.toString();
आप किसी क्षेत्र की दीवार-घड़ी के समय के लेंस के माध्यम से उस क्षण को देखना चाहते हैं । एक Instantबनाकर अपने वांछित / अपेक्षित समय क्षेत्र में समायोजित करें ZonedDateTime।
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
वैकल्पिक रूप से, आप plusHoursअपनी घंटों की संख्या को जोड़ने के लिए कॉल कर सकते हैं । ज़ोनड होने का मतलब है डेलाइट सेविंग टाइम (डीएसटी) और अन्य विसंगतियों को आपकी ओर से नियंत्रित किया जाएगा।
ZonedDateTime later = zdt.plusHours( 8 );
आप सहित पुराने तिथि-समय वर्गों का उपयोग करने से बचना चाहिए java.util.Dateऔर .Calendar। लेकिन अगर आपको वास्तव में java.util.Datejava.time प्रकारों के लिए अद्यतन नहीं की गई कक्षाओं के साथ इंटरऑपरेबिलिटी की आवश्यकता है , तो इसके ZonedDateTimeमाध्यम से कन्वर्ट करें Instant। पुराने वर्गों में जोड़े गए नए तरीके java.time प्रकार से / में रूपांतरण की सुविधा प्रदान करते हैं।
java.util.Date date = java.util.Date.from( later.toInstant() );
परिवर्तित करने के बारे में अधिक चर्चा के लिए, मेरे प्रश्न का उत्तर देखें , java.util में कनवर्ट करें। "java.time" प्रकार क्या है? ।
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date, Calendar, और SimpleDateFormat।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
आप अपने डेटाबेस से सीधे java.time वस्तुओं का आदान-प्रदान कर सकते हैं । JDBC 4.2 या उसके बाद के JDBC ड्राइवर का अनुपालन करें । तारों की कोई जरूरत नहीं, कक्षाओं की कोई जरूरत नहीं ।java.sql.*
Java.time कक्षाएं कहाँ से प्राप्त करें?
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के संभावित भविष्य के परिवर्धन के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval, YearWeek, YearQuarter, और अधिक ।
साथ Joda समय
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
ClassNotDefinedException
ZonedDateTimeबजाय एक के लिए जाना चाहिए LocalDateTime। "स्थानीय" साधन नहीं किसी विशेष इलाके से बंधा है, और न समय से बंधा। जैसे "क्रिसमस 25 दिसंबर, 2015 की आधी रात को शुरू होता है" विभिन्न समय क्षेत्रों में एक अलग पल है, जिसका कोई अर्थ नहीं है जब तक कि आप समय रेखा पर एक विशेष क्षण प्राप्त करने के लिए किसी विशेष समय क्षेत्र को लागू नहीं करते हैं। इसके अलावा, एक समय क्षेत्र डेलाइट सेविंग टाइम (डीएसटी) और अन्य विसंगतियों के बिना, लोकल टाइमटाइम के इस तरह के उपयोग से नियंत्रित नहीं किया जाएगा। तुलना करके मेरा उत्तर देखें ।
Newish java.util.concurrent.TimeUnit क्लास का उपयोग करके आप इसे इस तरह कर सकते हैं
Date oldDate = new Date(); // oldDate == current time
Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours
कुछ इस तरह:
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और java.text.SimpleDateFormatअब विरासत है , जावा 8 और जावा 9 में निर्मित जावा.टाइम क्लासेज द्वारा सप्लीमेंट किया गया है । Oracle द्वारा ट्यूटोरियल देखें ।
जब आपकी Dateवस्तु डाटटाइम प्रारूप में होती है तो यह कोड का एक और टुकड़ा होता है। इस कोड की सुंदरता है, यदि आप अधिक संख्या में घंटे देते हैं तो तिथि भी उसी अनुसार अपडेट होगी।
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());
यहाँ आउटपुट है:
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);
यदि आप उपयोग करने के लिए तैयार हैं java.time, तो यहां आईएसओ 8601 स्वरूपित अवधि जोड़ने की एक विधि दी गई है:
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)दिलचस्प है, धन्यवाद, लेकिन आप ऑपरेटर का उपयोग नहीं कर सकता है +पर LocalDateTime, आप संपादित करने के लिए है कि कर सकते हैं। लेकिन .plus(...)काम करता है।
Dateवस्तु के बारे में है, जो यूटीसी में एक विशिष्ट क्षण का प्रतिनिधित्व करता है। LocalDateTimeप्रश्न को संबोधित करने में आपका उपयोग विफल रहता है। LocalDateTimeसमय क्षेत्र या ऑफसेट-यूटीसी से किसी भी अवधारणा का अभाव है, और इसलिए एक पल का प्रतिनिधित्व नहीं कर सकता है। इस समस्या के लिए गलत वर्ग। देखें कि इंस्टेंट और लोकल डेटाइम में क्या अंतर है?
Dateऑब्जेक्ट को हटा दिया गया है। सवाल अस्पष्ट है जब यह समय क्षेत्र की बात आती है तो मेरे जवाब खड़े हो जाते हैं। इसके अलावा, आप बस के LocalDateTimeलिए बाहर स्वैप कर सकते हैं ZonedDateTime।
आप इसे Joda DateTime एपीआई के साथ कर सकते हैं
DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
जावा 8 कक्षाओं का उपयोग करके। हम दिनांक और समय को बहुत आसानी से नीचे के रूप में जोड़ सकते हैं।
LocalDateTime today = LocalDateTime.now();
LocalDateTime minusHours = today.minusHours(24);
LocalDateTime minusMinutes = minusHours.minusMinutes(30);
LocalDate localDate = LocalDate.from(minusMinutes);
Dateवस्तु के बारे में है, जो यूटीसी में एक विशिष्ट क्षण का प्रतिनिधित्व करता है। LocalDateTimeप्रश्न को संबोधित करने में आपका उपयोग विफल रहता है। LocalDateTimeसमय क्षेत्र या ऑफसेट-यूटीसी से किसी भी अवधारणा का अभाव है, और इसलिए एक पल का प्रतिनिधित्व नहीं कर सकता है। इस समस्या के लिए गलत वर्ग। देखें कि इंस्टेंट और लोकल डेटाइम में क्या अंतर है?
आप Java 8 से लोकलडेट टाइम का उपयोग कर सकते हैं। उदाहरण के लिए:
long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));
Dateवस्तु के बारे में है, जो यूटीसी में एक विशिष्ट क्षण का प्रतिनिधित्व करता है। LocalDateTimeप्रश्न को संबोधित करने में आपका उपयोग विफल रहता है। LocalDateTimeसमय क्षेत्र या ऑफसेट-यूटीसी से किसी भी अवधारणा का अभाव है, और इसलिए एक पल का प्रतिनिधित्व नहीं कर सकता है। इस समस्या के लिए गलत वर्ग। देखें कि इंस्टेंट और लोकल डेटाइम में क्या अंतर है?
आप इस विधि का उपयोग कर सकते हैं, इसे समझना और कार्यान्वित करना आसान है:
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();
}