मेरे दिनांक में मिनट कैसे जोड़े


110

मेरे पास यह दिनांक ऑब्जेक्ट है:

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());

d1 का मान है Fri Jan 07 17:40:00 PKT 2011

अब मैं ऊपर की तारीख में 10 मिनट जोड़ने की कोशिश कर रहा हूं।

Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());

के मूल्य newTimeपरिवर्तन करने के लिए 2011-50-07 17:50 , लेकिन यह होना चाहिए 07-01-2011 17:50

यह मिनटों को सही ढंग से जोड़ता है लेकिन यह महीने को बदल देता है, पता नहीं क्यों!



जवाबों:


193

आपके लिए मुद्दा यह है कि आप उपयोग कर रहे हैं mm। आपको उपयोग करना चाहिए MMMMमहीने के लिए है और mmमिनटों के लिए है। के साथ प्रयास करेंyyyy-MM-dd HH:mm

अन्य दृष्टिकोण:

यह इस रूप में सरल हो सकता है ( जोडा-टाइम का उपयोग करने के लिए अन्य विकल्प है )

static final long ONE_MINUTE_IN_MILLIS=60000;//millisecs

Calendar date = Calendar.getInstance();
long t= date.getTimeInMillis();
Date afterAddingTenMins=new Date(t + (10 * ONE_MINUTE_IN_MILLIS));

धन्यवाद, मैंने यह कोशिश की, तारीख सही ढंग से आ रही है, लेकिन जब मैं इसे स्ट्रिंग के रूप में बदलने की कोशिश करता हूं, तो यह मुझे एक ही गलत परिणाम देता है स्ट्रिंग newTime = df.format (afterAddingTenMins); यह मुझे 2011-50-07 17:50 देता है, मुझे इसे स्ट्रिंग में परिवर्तित करना है, कोई सुझाव
जून

1
@junaidp आपने बाद वाले कोड का उपयोग किया, लेकिन समाधान के पूर्व भाग को अनदेखा कर दिया?
कार्ल

57

आप org.apache.commons.lang3.time पैकेज में DateUtils वर्ग का उपयोग कर सकते हैं

int addMinuteTime = 5;
Date targetTime = new Date(); //now
targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute

1
DateUtils के पुराने संस्करण से निपटने वाले लोगों के लिए, पैकेज में इसका वर्तमान ->org.apache.commons.lang.time.DateUtils
realPK

32

@ पैंजिया के उत्तर को लागू करने की सुविधा विधि:

/*
*  Convenience method to add a specified number of minutes to a Date object
*  From: http://stackoverflow.com/questions/9043981/how-to-add-minutes-to-my-date
*  @param  minutes  The number of minutes to add
*  @param  beforeTime  The time that will have minutes added to it
*  @return  A date object with the specified number of minutes added to it 
*/
private static Date addMinutesToDate(int minutes, Date beforeTime){
    final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs

    long curTimeInMs = beforeTime.getTime();
    Date afterAddingMins = new Date(curTimeInMs + (minutes * ONE_MINUTE_IN_MILLIS));
    return afterAddingMins;
}

26

किसी भी निर्भरता से बचने के लिए आप java.util.Calendar का अनुसरण कर सकते हैं:

    Calendar now = Calendar.getInstance();
    now.add(Calendar.MINUTE, 10);
    Date teenMinutesFromNow = now.getTime();

जावा 8 में हमारे पास नया एपीआई है:

    LocalDateTime dateTime = LocalDateTime.now().plus(Duration.of(10, ChronoUnit.MINUTES));
    Date tmfn = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());

17

यह गलत तरीके से निर्दिष्ट है:

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");

आप महीने के बजाय मिनट का उपयोग कर रहे हैं (MM)


6

tl; डॉ

LocalDateTime.parse( 
    "2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )

java.time

दिनांक-समय के काम के लिए उत्कृष्ट java.time कक्षाओं का उपयोग करें। ये कक्षाएं इस तरह के java.util.Dateऔर पुराने पुराने समय की परेशानियों को दबा देती हैं java.util.Calendar

आईएसओ 8601

Java.time कक्षाएं दिनांक-समय मानों के तार / उत्पन्न करने के लिए डिफ़ॉल्ट रूप से मानक आईएसओ 8601 प्रारूपों का उपयोग करती हैं। अपने इनपुट स्ट्रिंग का अनुपालन करने के लिए, बीच में SPACE की जगह a T

String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );

LocalDateTime

अपने इनपुट स्ट्रिंग को पार्स करें LocalDateTimeक्योंकि इसमें समय क्षेत्र या ऑफसेट-यूटीसी के बारे में किसी भी जानकारी का अभाव है।

LocalDateTime ldt = LocalDateTime.parse( inputModified );

दस मिनट जोड़ें।

LocalDateTime ldtLater = ldt.plusMinutes( 10 );

ldt.toString (): 2016-01-23T12: 34

ldtLater.toString (): 2016-01-23T12: 44

IdeOne.com में लाइव कोड देखें ।

इसका LocalDateTimeकोई समय क्षेत्र नहीं है, इसलिए यह समयरेखा पर एक बिंदु का प्रतिनिधित्व नहीं करता है। वास्तविक समय में अनुवाद करने के लिए एक समय क्षेत्र लागू करें। एक निर्दिष्ट उचित समय क्षेत्र नाम के प्रारूप में continent/region, इस तरह के रूप America/Montreal, Africa/Casablancaया Pacific/Auckland, या Asia/Karachi। 3-4 पत्र संक्षिप्त नाम का उपयोग कभी नहीं इस तरह के रूप ESTया ISTया PKTवे कर रहे हैं के रूप में नहीं सच समय क्षेत्र, नहीं मानकीकृत, और यहां तक कि अद्वितीय नहीं (!)।

ZonedDateTime

यदि आप इस मान के लिए निर्धारित समय क्षेत्र जानते हैं, तो a ZoneIdपाने के लिए आवेदन करें ZonedDateTime

ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );

zdt.toString (): 2016-01-23T12: 44 + 05: 00 [एशिया / कराची]

विसंगतियों

टाइम ज़ोन जोड़ने से पहले या बाद में उन दस मिनट को जोड़ने के बारे में सोचें। दीवार-घड़ी के समय को स्थानांतरित करने वाले डेलाइट सेविंग टाइम (डीएसटी) जैसी विसंगतियों के कारण आपको बहुत अलग परिणाम मिल सकते हैं

ज़ोन जोड़ने से पहले या बाद में आपको 10 मिनट जोड़ना चाहिए या नहीं यह आपके व्यवसाय परिदृश्य और नियमों के अर्थ पर निर्भर करता है।

युक्ति: जब आप समय पर एक विशिष्ट क्षण का इरादा रखते हैं, तो हमेशा समय क्षेत्र की जानकारी रखें । उस जानकारी को न खोएं, जैसा कि आपके इनपुट डेटा के साथ किया गया है। क्या मूल्य का 12:34अर्थ पाकिस्तान में दोपहर है या फ्रांस में दोपहर है या क्वेबेक में दोपहर है? अगर आपका मतलब पाकिस्तान में दोपहर है, तो कम से कम ऑफसेट-यूटीसी ( +05:00), और बेहतर अभी भी, समय क्षेत्र के नाम ( ) को शामिल करके कहें Asia/Karachi

Instant

यदि आप उसी क्षण चाहते हैं जैसे कि यूटीसी के लेंस के माध्यम से देखा जाता है , तो एक निकालें InstantInstantकक्षा में समय रेखा पर एक पल का प्रतिनिधित्व करता यूटीसी के एक संकल्प के साथ नैनोसेकंड (नौ (9) एक दशमलव भिन्न के अंकों के लिए)।

Instant instant = zdt.toInstant();

धर्मांतरित

जब भी संभव हो पुरानी परेशान करने वाली पुरानी कक्षाओं से बचें। लेकिन अगर आपको चाहिए, तो आप परिवर्तित कर सकते हैं। पुरानी कक्षाओं में जोड़े गए नए तरीकों को कॉल करें।

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

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

Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date, Calendar, और SimpleDateFormat

Joda समय परियोजना, अब में रखरखाव मोड , प्रवास java.time को सलाह देता है।

अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है

Java.time कक्षाएं कहाँ से प्राप्त करें?

ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के संभावित भविष्य के अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval, YearWeek, YearQuarter, और अधिक


4

आपके SimpleDateFormat के पैटर्न में एक त्रुटि है। यह होना चाहिए

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");

4

इस प्रारूप का उपयोग करें,

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");

मिनट के लिए मिमी और mounth के लिए एम.एम.


2

एक बार जब आप डेट कर चुके होते हैं, तो मैं इस उपयोगिता फ़ंक्शन का उपयोग घंटे, मिनट या सेकंड जोड़ने के लिए करता हूं:

public class DateTimeUtils {
    private static final long ONE_HOUR_IN_MS = 3600000;
    private static final long ONE_MIN_IN_MS = 60000;
    private static final long ONE_SEC_IN_MS = 1000;

    public static Date sumTimeToDate(Date date, int hours, int mins, int secs) {
        long hoursToAddInMs = hours * ONE_HOUR_IN_MS;
        long minsToAddInMs = mins * ONE_MIN_IN_MS;
        long secsToAddInMs = secs * ONE_SEC_IN_MS;
        return new Date(date.getTime() + hoursToAddInMs + minsToAddInMs + secsToAddInMs);
    }
}

लंबे समय तक जोड़ते समय सावधान रहें, 1 दिन हमेशा 24 घंटे नहीं होता है (दिन के उजाले की बचत-प्रकार समायोजन, छलांग सेकंड और इसी तरह), इसके Calendarलिए सिफारिश की जाती है।


1

मेरे लिए काम करें DateUtils

//import
import org.apache.commons.lang.time.DateUtils

...

        //Added and removed minutes to increase current range dates
        Date horaInicialCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaInicial.getTime()),-1)
        Date horaFinalCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaFinal.getTime()),1)

2
यह उत्तर पिछले साल के अलरिज़ा अललाह द्वारा पोस्ट किए गए एक पर कैसे सुधार करता है ? इसके अलावा, प्रश्न मिनटों को संदर्भित करता है, सेकंड्स के लिए नहीं।
बेसिल बोर्क

1

स्थिरांक के बिना किया जा सकता है (जैसे 3600000 एमएस 1h है)

public static Date addMinutesToDate(Date date, int minutes) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MINUTE, minutes);
        return calendar.getTime();
    }

public static Date addHoursToDate(Date date, int hours) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.HOUR_OF_DAY, hours);
    return calendar.getTime();
}

उपयोग का उदाहरण:

System.out.println(new Date());
System.out.println(addMinutesToDate(new Date(), 5));

Tue May 26 16:16:14 CEST 2020
Tue May 26 16:21:14 CEST 2020

1
इन भयानक तारीख-समय वर्गों को आधुनिक java.time कक्षाओं द्वारा जेएसआर 310 को अपनाने के रूप में सालों पहले दबा दिया गया था ।
बासिल बॉर्क

-2

बस जो दिलचस्पी है उसके लिए। मैं एक iOS प्रोजेक्ट पर काम कर रहा था जिसमें समान कार्यक्षमता की आवश्यकता थी इसलिए मैंने स्विफ्ट को @Jznag द्वारा उत्तर पोर्ट करना समाप्त कर दिया

private func addMinutesToDate(minutes: Int, beforeDate: NSDate) -> NSDate {
    var SIXTY_SECONDS = 60

    var m = (Double) (minutes * SIXTY_SECONDS)
    var c =  beforeDate.timeIntervalSince1970  + m
    var newDate = NSDate(timeIntervalSince1970: c)

    return newDate
}

स्विफ्ट की तारीख पहले से ही समान बिल्ड-इन फ़ंक्शन थी, उदाहरण के लिए दिनांक (टाइमइंटरवल:, के बाद से):
अल्बर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.