एक घंटे पहले जावा तिथि बदलना


124

मेरे पास जावा तिथि वस्तु है:

Date currentDate = new Date();

यह वर्तमान दिनांक और समय देगा। उदाहरण:

Thu Jan 12 10:17:47 GMT 2012

इसके बजाय, मैं तारीख प्राप्त करना चाहता हूं, इसे एक घंटे पहले बदल रहा हूं, इसलिए इसे मुझे देना चाहिए:

Thu Jan 12 09:17:47 GMT 2012

इसे करने का सबसे अच्छा तरीका क्या होगा?


क्या mktimeजावा में कोई समकक्ष है? इससे 60 मिनट घटाएं?
शिप्लु मोकादिम

जवाबों:


243

java.util.Calendar

Calendar cal = Calendar.getInstance();
// remove next line if you're always using the current time.
cal.setTime(currentDate);
cal.add(Calendar.HOUR, -1);
Date oneHourBack = cal.getTime();

java.util.Date

new Date(System.currentTimeMillis() - 3600 * 1000);

org.joda.time.LocalDateTime

new LocalDateTime().minusHours(1)

जावा 8: java.time.ocalDateTime

LocalDateTime.now().minusHours(1)

जावा 8 java.time.stant

// always in UTC if not timezone set
Instant.now().minus(1, ChronoUnit.HOURS));
// with timezone, Europe/Berlin for example
Instant.now()
       .atZone(ZoneId.of("Europe/Berlin"))
       .minusHours(1));

8
बस इस तथ्य से भिन्न हो सकते हैं कि Calendar.HOUR है जो 12 घंटे की घड़ी और Calendar.HOUR_OF_DAY के साथ 24 घंटे की घड़ी के साथ काम करता है: chintat.blogspot.ca/2006/05/…
वुल्फ

क्या कैलेंडर काम के साथ पहला समाधान होगा यदि समय एक दिन की मध्यरात्रि है और आप एक घंटा जल्दी चाहते हैं जो पिछले दिन रात 11 बजे है?
जॉर्ज आरोकियम

1
@GeorgeArokiam हां, यह होगा
किमी

66

@ सुमित जैन के समाधान के समान

Date currentDate = new Date(System.currentTimeMillis() - 3600 * 1000);

या

Date currentDate = new Date(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1));

3
बेहतर उपाय। इस विशेष अनुप्रयोग में कैलेंडर आवृत्ति निर्माण ओवरकिल की तरह दिखता है।
www.Decompiler.com

2
@cosmolev कैलेंडर मेरे द्वारा प्राप्त किए गए अधिकांश उदाहरणों में ओवरकिल है।
पीटर लॉरी

2
@ Stoan मैंने एक और पठनीय उदाहरण जोड़ा है। आपको ध्यान देना चाहिए कि कैलेंडर अविश्वसनीय रूप से अक्षम है।
पीटर लॉरी

@PeterLawrey Date currentDate = new Date(System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(10)); यह 10 मिनट पीछे होना चाहिए?
सिया सोसिबो

15

tl; डॉ

में यूटीसी :

Instant.now().minus( 1 , ChronoUnit.HOURS ) 

या, ज़ोनड:

Instant.now()
       .atZone( ZoneId.of ( "America/Montreal" ) )
       .minusHours( 1 )

Java.time का उपयोग करना

जावा 8 और बाद में नया जावा.टाइम फ्रेमवर्क बनाया गया है।

Instant

यदि आप केवल यूटीसी (जीएमटी) की परवाह करते हैं, तो Instantकक्षा का उपयोग करें ।

Instant instant = Instant.now ();
Instant instantHourEarlier = instant.minus ( 1 , ChronoUnit.HOURS );

सांत्वना देना।

System.out.println ( "instant: " + instant + " | instantHourEarlier: " + instantHourEarlier );

तत्काल: 2015-10-29T00: 37: 48.921Z | इंस्टेंटहोरलैर: 2015-10-28T23: 37: 48.921Z

इस बात पर ध्यान दें कि कल की तारीख पर वापस जाने के लिए यह तुरंत कैसे हुआ।

ZonedDateTime

यदि आप समय क्षेत्र की परवाह करते हैं, तो ZonedDateTimeकक्षा का उपयोग करें । आप एक पल के साथ शुरू कर सकते हैं और एक समय क्षेत्र, एक ZoneIdवस्तु असाइन कर सकते हैं । यह वर्ग डेलाइट सेविंग टाइम (DST) जैसी विसंगतियों के लिए आवश्यक समायोजन को संभालता है ।

Instant instant = Instant.now ();
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
ZonedDateTime zdtHourEarlier = zdt.minus ( 1 , ChronoUnit.HOURS );

सांत्वना देना।

System.out.println ( "instant: " + instant + "\nzdt: " + zdt + "\nzdtHourEarlier: " + zdtHourEarlier );

तत्काल: 2015-10-29T00: 50: 30.778Z

zdt: 2015-10-28T20: 50: 30.778-04: 00 [अमेरिका / मॉन्ट्रियल]

zdtHourEarlier: 2015-10-28T19: 50: 30.778-04: 00 [अमेरिका / मॉन्ट्रियल]

रूपांतरण

पुराने java.util.Date/.Calendar क्लासेस अब आउटमोडेड हैं। इनसे बचें। वे कुख्यात परेशान और भ्रमित हैं।

जब आपको java.time प्रकारों के लिए अभी तक अपडेट नहीं किए गए पुराने कोड के साथ संचालन के लिए पुरानी कक्षाओं का उपयोग करना चाहिए, तो रूपांतरण विधियों को कॉल करें। यहाँ उदाहरण कोड है जो किसी इंस्टैंट या ZonedDateTime से java.util.Date पर जा रहा है।

java.util.Date date = java.util.Date.from( instant );

... या ...

java.util.Date date = java.util.Date.from( zdt.toInstant() );

जावा के बारे में

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, और अधिक


हेलो सर, मुझे अभी भी इंस्टेंट के लिए "समय पहले" बनाने का उचित तरीका नहीं मिल रहा है।
टिचरहाज


7

या प्रसिद्ध Joda Time पुस्तकालय का उपयोग कर :

DateTime dateTime = new DateTime();
dateTime = dateTime.minusHours(1);
Date modifiedDate = dateTime.toDate();

5

बस तारीख से एक घंटे में मिलीसेकंड की संख्या घटाएं।

currentDate.setTime(currentDate.getTime() - 3600 * 1000));


4

आप दिनांक और समय के लिए bellow कोड से उपयोग कर सकते हैं:

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
       //get current date time with Calendar()
       Calendar cal = Calendar.getInstance();
       System.out.println("Current Date Time : " + dateFormat.format(cal.getTime()));

       cal.add(Calendar.DATE, 1);
       System.out.println("Add one day to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MONTH, 1);
       System.out.println("Add one month to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.YEAR, 1);
       System.out.println("Add one year to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.HOUR, 1);
       System.out.println("Add one hour to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MINUTE, 1);
       System.out.println("Add one minute to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.SECOND, 1);
       System.out.println("Add one second to current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.DATE, -1);
       System.out.println("Subtract one day from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MONTH, -1);
       System.out.println("Subtract one month from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.YEAR, -1);
       System.out.println("Subtract one year from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.HOUR, -1);
       System.out.println("Subtract one hour from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.MINUTE, -1);
       System.out.println("Subtract one minute from current date : " + dateFormat.format(cal.getTime()));

       cal = Calendar.getInstance();
       cal.add(Calendar.SECOND, -1);
       System.out.println("Subtract one second from current date : " + dateFormat.format(cal.getTime()));

आउटपुट:

Current Date Time : 2008/12/28 10:24:53
Add one day to current date : 2008/12/29 10:24:53
Add one month to current date : 2009/01/28 10:24:53
Add one year to current date : 2009/12/28 10:24:53
Add one hour to current date : 2008/12/28 11:24:53
Add one minute to current date : 2008/12/28 10:25:53
Add one second to current date : 2008/12/28 10:24:54
Subtract one day from current date : 2008/12/27 10:24:53
Subtract one month from current date : 2008/11/28 10:24:53
Subtract one year from current date : 2007/12/28 10:24:53
Subtract one hour from current date : 2008/12/28 09:24:53
Subtract one minute from current date : 2008/12/28 10:23:53
Subtract one second from current date : 2008/12/28 10:24:52

यह लिंक अच्छा है: यहाँ देखें

और देखें: भी देखें

और: यहाँ

और: यहाँ

और: यहाँ

अगर आपको बस समय चाहिए:

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

2
FYI करें: इस उत्तर में पुराने जमाने के समय की परेशानियों का उपयोग किया गया है, जो अब आधुनिक java.time कक्षाओं द्वारा विरासत में ली गई हैं।
तुलसी बॉर्क

0

इसका उपयोग करके प्राप्त किया जा सकता है java.util.Date। निम्न कोड आपकी तारीख से 1 घंटा घटा देगा।

Date date = new Date(yourdate in date format);
Date newDate = DateUtils.addHours(date, -1)

इसी तरह अपनी तिथि से 20 सेकंड घटाकर

newDate = DateUtils.addSeconds(date, -20)    

-1

मिलीसेकंड में समय प्राप्त करें, अपने मिनटों को मिलीसेकेंड में घटाएं और इसे दिनांक में परिवर्तित करें। यहाँ आप एक वस्तु की जरूरत है !!!

    int minutes = 60;
    long currentDateTime = System.currentTimeMillis();
    Date currentDate = new Date(currentDateTime - minutes*60*1000);
    System.out.println(currentDate);

@ मैककी: मुझे पता है कि चीजें बदल गई हैं। लेकिन इसका गलत जवाब नहीं !!! आप इसे गलत उत्तर क्यों बताते हैं? क्या आपने स्वीकृत उत्तर को पूरी तरह से देखा?
जेनिथ

1
आप ऐसे प्रश्न का उत्तर भी क्यों देंगे जो 5 वर्ष पुराना है और उत्तर स्वीकार कर लिया गया है।
मक्की

यह उत्तर मौजूदा वर्षों के उत्तरों से परे कोई मूल्य प्रदान नहीं करता है। और यह उत्तर अनजाने में पुराने पुराने समय की कक्षाओं का उपयोग करता है जिन्हें java.time कक्षाओं द्वारा वर्षों तक दबाया गया है। एक अन्य समस्या: यह उत्तर समय क्षेत्र के मुद्दे की अनदेखी करता है, और कोड दिखाता है जो जेवीएम के वर्तमान डिफ़ॉल्ट समय क्षेत्र का उपयोग करेगा जबकि प्रश्न जीएमटी / यूटीसी के लिए पूछा गया था। किमी द्वारा सही उत्तर के बाद के हिस्से देखें या अधिक चर्चा के लिए मेरा उत्तर देखें ।
तुलसी बॉर्क

-1

इसने प्रारूप का उपयोग करने के बजाय मेरे लिए काम किया। समय के साथ काम करने के लिए बस पार्स और स्ट्रींग () विधियों का उपयोग करें

स्ट्रिंग स्थानीय समय = "6:11"; लोकल टाइम लोकल टाइम = लोकल टाइम.स्पर्श (स्थानीय समय)

लोकल टाइम लेफ्ट = 6:11; स्थानीय समय = lt.toString ()


1
यह उत्तर प्रश्न को संबोधित नहीं करता है। सवाल अकेले समय के बारे में अधिक से अधिक है।
तुलसी बोर्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.