দ্রুত সময়ে কীভাবে মিনিট যুক্ত করা যায়


109

আমি সুইফটে নতুন এবং একটি শিডিয়ুলার চেষ্টা করছি। আমার শুরু করার সময়টি নির্বাচিত হয়েছে এবং আমার শুরু সময়ের সাথে 5 মিনিট (বা এর বহুগুণ) যুক্ত করতে হবে এবং এটি কোনও ইউআইএবেলে প্রদর্শন করতে হবে?

    @IBAction func timePickerClicked(sender: UIDatePicker) {
    var dateFormatter = NSDateFormatter()
    dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
    var dateStr = dateFormatter.stringFromDate(startTime.date)
    let sttime = dateStr
    startTimeDisplay.text = dateStr
    }

   // How to advance time by 5 minutes for each section based on the   start time selected and display time 
   // section 1 = start time + 5
   // section 2 = start time + 10*

উত্তর:


271

দুটি পন্থা:

  1. ব্যবহার করুন Calendarএবং date(byAdding:to:wrappingComponents:)। যেমন, সুইফ্ট 3 এবং তারপরে:

    let calendar = Calendar.current
    let date = calendar.date(byAdding: .minute, value: 5, to: startDate)
  2. একটি যুক্ত করতে (যেমন সেকেন্ডের একটি নির্দিষ্ট সংখ্যা ) যুক্ত করতে কেবল +অপারেটর ব্যবহার +(_:_:)করুন see TimeIntervalযেমন পাঁচ মিনিট যোগ করতে পারেন, আপনি:

    let date = startDate + 5 * 60

    (দ্রষ্টব্য, অর্ডারটি এখানে সুনির্দিষ্ট: বামদিকে তারিখ +এবং ডানদিকে সেকেন্ডগুলি)

    আপনি addingTimeIntervalযদি পছন্দ করেন তবে আপনি এটি ব্যবহার করতে পারেন :

    let date = startDate.addingTimeInterval(5 * 60)

নীচের লাইনটি +/ addingTimeIntervalসহজ দৃশ্যের জন্য সবচেয়ে সহজ, তবে আপনি যদি কখনও বৃহত্তর ইউনিট (উদাহরণস্বরূপ, দিন, মাস, ইত্যাদি) যুক্ত করতে চান তবে আপনি সম্ভবত ক্যালেন্ডারিক্যাল গণনাগুলি ব্যবহার করতে চাইবেন কারণ সেগুলি দিবালোকের সঞ্চয়ের জন্য সামঞ্জস্য addingTimeIntervalকরে , যেখানে না ।


সুইফট 2 রেন্ডিশনের জন্য, এই উত্তরের পূর্ববর্তী সংশোধনটি দেখুন ।


এই 2 পদ্ধতির মধ্যে কোনটি আরও পারফরম্যান্ট? অ্যাডটাইমইন্টারওয়াল বা ক্যালেন্ডার.ডেট (অ্যাডিংয়ের মাধ্যমে ...
নিশান্ত

3
addingTimeIntervalনিঃসন্দেহে আরো performant (যতক্ষণ না আপনি সময়ের এই লক্ষ লক্ষ করছেন উপাদান না যদিও সম্ভবত) হয়। আরও গুরুতর বিষয় হল, আপনি যদি দিনে (বা তার বেশি) পরিমাপের এককগুলির বিষয়ে কথা বলছেন তবে ক্যালেন্ডারিকাল উপস্থাপনাটি পছন্দনীয় কারণ এটি আপনার জন্য দিবালোকের সমস্ত সঞ্চয় সমন্বয় করে।
রব

40

আপনি ক্যালেন্ডারের পদ্ধতিটি ব্যবহার করতে পারেন

func date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = default) -> Date?

যে কোনও একটি যোগ Calendar.Componentকরতে Date। আপনার UIDatePickerতারিখের সাথে এক্স মিনিট যুক্ত করতে আপনি একটি তারিখ এক্সটেনশন তৈরি করতে পারেন :

এক্সকোড 8 এবং এক্সকোড 9 • সুইফট 3.0 এবং সুইফট 4.0

extension Date {
    func adding(minutes: Int) -> Date {
        return Calendar.current.date(byAdding: .minute, value: minutes, to: self)!
    }
}

তারপরে আপনি প্রেরকের (ইউআইডিটপিকার) কয়েক মিনিট যোগ করার জন্য কেবল এক্সটেনশন পদ্ধতিটি ব্যবহার করতে পারেন:

let section1 = sender.date.adding(minutes: 5)
let section2 = sender.date.adding(minutes: 10)

খেলার মাঠ পরীক্ষা:

Date().adding(minutes: 10)  //  "Jun 14, 2016, 5:31 PM"

কোন পরিস্থিতিতে .date(byAdding:value:to)ফিরে আসে nil? আমরা এখানে আন-জোর করে জোর দেওয়া নিরাপদ?
ডিক্লান ম্যাক কেনেনা

@ ডেকো কীভাবে একটি তারিখের রিটার্নে মিনিট যুক্ত করবে? বিশ্ব যদি ফলাফলের তারিখে শেষ না হয় আপনি নিরাপদ :)
লিও ডাবাস

2
এটি কীভাবে শূন্য করতে পারে সে সম্পর্কে ডকুমেন্টেশন পরিষ্কার নয়। এই প্রশ্নটি এটি ব্যাখ্যা করে, আপনি এখানে ঠিকই নিরাপদ। stackoverflow.com/questions/39358131/...
ডেকলান McKenna

21

সুইফট 4 :

// তারিখে 5 মিনিট যুক্ত করুন

let date = startDate.addingTimeInterval(TimeInterval(5.0 * 60.0))

// তারিখ থেকে 5 মিনিট বিয়োগ করুন

let date = startDate.addingTimeInterval(TimeInterval(-5.0 * 60.0))

সুইফ্ট 5.1:

// subtract 5 minutes from date
transportationFromDate.addTimeInterval(TimeInterval(-5.0 * 60.0))

4

আপনি তারিখ গণিত ব্যবহার করে করতে পারেন NSDateComponents। উদাহরণ স্বরূপ:

import Foundation

let comps = NSDateComponents()

comps.minute = 5

let cal = NSCalendar.currentCalendar()

let r = cal.dateByAddingComponents(comps, toDate: NSDate(), options: nil)

আপনি যখন খেলার মাঠে এটি চেষ্টা করেন আপনি যা দেখেন

এখানে চিত্র বর্ণনা লিখুন



4

এই সামান্য এক্সটেনশনটি সংরক্ষণ করুন:

extension Int {

 var seconds: Int {
    return self
 }

 var minutes: Int {
    return self.seconds * 60
 }

 var hours: Int {
    return self.minutes * 60
 }

 var days: Int {
    return self.hours * 24
 }

 var weeks: Int {
    return self.days * 7
 }

 var months: Int {
    return self.weeks * 4
 }

 var years: Int {
    return self.months * 12
 }
}

তারপরে এটিকে স্বজ্ঞাতভাবে ব্যবহার করুন:

let threeDaysLater = TimeInterval(3.days)
date.addingTimeInterval(threeDaysLater)

2
দুর্ভাগ্যক্রমে, মাস এবং বছরগুলি ভুল। 7 * 4 * 12 = 336, এই অনেক 365 কম
KlimczakM

1
: এটা ভালো মাসের গণনা করে উন্নত করা যায় self.days * 30বছর এবং: self.days * 365। এটি নিখুঁত নয় কারণ বছরটি 366 দিন থাকতে পারে এবং মাসটি 30 দিনের চেয়ে আলাদা হতে পারে তবে এটি এখনও 28/336 এর চেয়ে ভাল better
KlimczakM

2
উপরে তালিকাভুক্ত সমস্ত কারণে আপনার অবশ্যই এটি ব্যবহার করা উচিত নয়, এটি বিভিন্ন ক্ষেত্রে একত্রে ভুল urate অন্তর্নির্মিত ডেটা গণিতের ফাংশনগুলি ব্যবহার করুন
স্টিভেন স্টেফানিক

1
মাসগুলি সর্বদা 4 সপ্তাহের সমান হয় না, এটির সাথে কীভাবে লিপ বছরগুলি হয়?
মেহেদী চেন্নোফি

3

আপনি সুইফট 4 বা 5 এ ব্যবহার করতে পারেন

    let date = Date()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd H:mm:ss"
    let current_date_time = dateFormatter.string(from: date)
    print("before add time-->",current_date_time)

    //adding 5 miniuts
    let addminutes = date.addingTimeInterval(5*60)
    dateFormatter.dateFormat = "yyyy-MM-dd H:mm:ss"
    let after_add_time = dateFormatter.string(from: addminutes)
    print("after add time-->",after_add_time)

আউটপুট:

before add time--> 2020-02-18 10:38:15
after add time--> 2020-02-18 10:43:15

2

সুইফট 3:

let minutes: TimeInterval = 1 * 60
let nowPlusOne = Date() + minutes

0

আপনি যদি ইউনিক্স টাইমস্ট্যাম্প চান

        let now : Date = Date()
        let currentCalendar : NSCalendar = Calendar.current as NSCalendar

        let nowPlusAddTime : Date = currentCalendar.date(byAdding: .second, value: accessTime, to: now, options: .matchNextTime)!

        let unixTime = nowPlusAddTime.timeIntervalSince1970

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.