मैं स्ट्रिंग को NSDate में कैसे बदल सकता हूं?


195

मैं "2014-07-15 06: 55: 14.198000 + 00: 00" इस स्ट्रिंग तिथि को स्विफ्ट में NSDate में बदलना चाहता हूं।


यदि आप अपने स्ट्रिंग की तरह दिखते हैं "2014-07-15 06: 55: 14.198000 + 00: 00" यदि आप NSDateFormatter
Alex Peda

userguide.icu-project.org/formatparse/datetime ने मुझे बहुत मदद की
शार्दुल

नीचे दिए गए सभी उत्तरों के लिए एक साथी संसाधन के रूप में, मैं अत्यधिक nsdateformatter.com
user3344977

यहाँ पुराने उत्तर वास्तव में गलत हैं । Apple डोको क्रिस्टल कहता है कि आपको फ़ॉर्मेटर को कैश करने की आवश्यकता है। stackoverflow.com/a/42370648/294884
Fattie

यदि आपको प्रारूप के साथ किसी सहायक की आवश्यकता है, तो nsdateformatter.com
पेड्रो लूज

जवाबों:


341

इसे इस्तेमाल करे:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = /* find out and place date format from 
                            * http://userguide.icu-project.org/formatparse/datetime
                            */
let date = dateFormatter.dateFromString(/* your_date_string */)

आगे क्वेरी के लिए, क्रमशः NS -ateFormatter और DateFormatter Foundation फ्रेमवर्क की कक्षाओं को Object-C और Swift के लिए जांचें ।

स्विफ्ट 3 और बाद में (स्विफ्ट 4 शामिल)

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = /* date_format_you_want_in_string from
                            * http://userguide.icu-project.org/formatparse/datetime
                            */
guard let date = dateFormatter.date(from: /* your_date_string */) else {
   fatalError("ERROR: Date conversion failed due to mismatched format.")
}

// use date constant here

11
इस समाधान को बस "yyyy-MM-dd hh: mm: ss.SSSSxxx" सेट करने की आवश्यकता है
शार्दुल

1
मेरे पास इस तरह की एक तारीख स्ट्रिंग है "2014-07-15 06: 55: 14-0400" और मैंने उपयोग करने की कोशिश की yyyy-MM-dd hh:mm:ssZZZ। लेकिन मैं स्ट्रिंग से तारीख ऑब्जेक्ट प्राप्त करने में सक्षम नहीं हूं।
इप्रेम

2
@Prem, यदि आप देखते हैं कि आउटपुट "2014-07-15 10:55:14 +0000"सही है। से के रूप में NSDateविवरण, तारीख के उत्पादन में अंतर (यहाँ, GMT -4 घंटे) के साथ गणना की जाएगी। यदि आप GMT और UTC के बीच अंतर प्राप्त करना चाहते हैं, जो -0400इस संदर्भ की
x4h1d

@ x4h1d, अरे मुझे मिल गया है! मैंने एक गलती की hhजिसमें होना चाहिए HH। धन्यवाद!
इप्रेम

3
@ lmiguelvargasf, मुझे लगता है कि होगा yyyy-MM-dd'T'HH:mm:ss.SSS'Z'। मैंने मान लिया Zकि यहां सिर्फ एक किरदार है। याद रखें, Zएक विशेष अर्थ भी है। यदि आप के Zरूप में निर्दिष्ट करना चाहते हैं basic hmsप्रारूप से होगा yyyy-MM-dd'T'HH:mm:ss.SSSZ
x4h1d

71

स्विफ्ट 4

import Foundation

let dateString = "2014-07-15" // change to your date format

var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"

let date = dateFormatter.date(from: dateString)
println(date)

स्विफ्ट 3

import Foundation

var dateString = "2014-07-15" // change to your date format

var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"

var date = dateFormatter.dateFromString(dateString)
println(date)

मैं इसे इस कोड के साथ कर सकता हूं।


5
कोड सही नहीं है। यह कुछ "जन 15, 2014, 12:00 पूर्वाह्न"
जेक लिन

5
का उपयोग कर ddके बजाय DD"हमेशा जनवरी" इस मुद्दे को ठीक मदद करनी चाहिए।
पास्कल बेलोनकल

1
सही संस्करण है, yyyy-MM-ddअन्यथा, पार्स की गई तारीख जनवरी में अटक गई है - मैंने परिवर्तन को प्रतिबिंबित करने के लिए उत्तर अपडेट किया।
ज़ोरयार

क्या होगा यदि मैं वर्तमान तिथि को स्ट्रिंग के रूप में पारित करना चाहता हूं। यह काम करेगा?
अर्जुन कालिदास

@Zorayr, Kittisak: मुझे आउट पुट मिल रहा है, ऑप्शनल (2014-07-14 18:30:00 +0000) इसका मतलब है कि एक दिन में कमी है। मैं इसे कैसे ठीक करूं ?
विनेश टीपी

54
 func convertDateFormatter(date: String) -> String
 {

    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
    dateFormatter.timeZone = NSTimeZone(name: "UTC")
    let date = dateFormatter.dateFromString(date)


    dateFormatter.dateFormat = "yyyy MMM EEEE HH:mm"///this is what you want to convert format
    dateFormatter.timeZone = NSTimeZone(name: "UTC")
    let timeStamp = dateFormatter.stringFromDate(date!)


    return timeStamp
}

स्विफ्ट 3 के लिए अपडेट किया गया।

func convertDateFormatter(date: String) -> String
{

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
    dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone!
    let date = dateFormatter.date(from: date)


    dateFormatter.dateFormat = "yyyy MMM EEEE HH:mm"///this is what you want to convert format
    dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone!
    let timeStamp = dateFormatter.string(from: date!)


    return timeStamp
}

17

विवरण

  • स्विफ्ट 4, एक्सकोड 9.2
  • स्विफ्ट 5, Xcode 10.2 (10E125)

उपाय

import Foundation

extension DateFormatter {

    convenience init (format: String) {
        self.init()
        dateFormat = format
        locale = Locale.current
    }
}

extension String {

    func toDate (dateFormatter: DateFormatter) -> Date? {
        return dateFormatter.date(from: self)
    }

    func toDateString (dateFormatter: DateFormatter, outputFormat: String) -> String? {
        guard let date = toDate(dateFormatter: dateFormatter) else { return nil }
        return DateFormatter(format: outputFormat).string(from: date)
    }
}

extension Date {

    func toString (dateFormatter: DateFormatter) -> String? {
        return dateFormatter.string(from: self)
    }
}

प्रयोग

var dateString = "14.01.2017T14:54:00"
let dateFormatter = DateFormatter(format: "dd.MM.yyyy'T'HH:mm:ss")
let date = Date()

print("original String with date:               \(dateString)")
print("date String() to Date():                 \(dateString.toDate(dateFormatter: dateFormatter)!)")
print("date String() to formated date String(): \(dateString.toDateString(dateFormatter: dateFormatter, outputFormat: "dd MMMM")!)")
let dateFormatter2 = DateFormatter(format: "dd MMM HH:mm")
print("format Date():                           \(date.toString(dateFormatter: dateFormatter2)!)")

परिणाम

यहां छवि विवरण दर्ज करें

अधिक जानकारी

दिनांक प्रारूप के बारे में


15

यदि आपको अक्सर तार को एक तिथि में पार्स करने की आवश्यकता होती है, तो आप कार्यक्षमता को एक्सटेंशन में स्थानांतरित करना चाह सकते हैं। मैंने एक shareCode.swift फ़ाइल बनाई और अपने एक्सटेंशन वहां रखे:

extension String
{   
    func toDateTime() -> NSDate
    {
        //Create Date Formatter
        let dateFormatter = NSDateFormatter()

        //Specify Format of String to Parse
        dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss.SSSSxxx"

        //Parse into NSDate
        let dateFromString : NSDate = dateFormatter.dateFromString(self)!

        //Return Parsed Date
        return dateFromString
    }
}

फिर अगर आप अपने स्ट्रिंग को एनएसडी में बदलना चाहते हैं तो आप कुछ ऐसा लिख ​​सकते हैं:

var myDate = myDateString.toDateTime()

1
धन्यवाद। यह भी संभव है, हालांकि यह कम उपयोगी है, लिखने के लिए: var myDate = "04-05-2015" .toDateTime () मुझे परीक्षण डेटा सेट करते समय यह काम मिला।
स्टीफन वॉटसन 16

1
मुझे पूरा यकीन है कि इस मामले में hhहोना चाहिए HH
एलेक्स

यह मुझे निर्दिष्ट प्रारूप में नहीं देता है: var date = NSDate (); let dateFormatter = NSDateFormatter (); dateFormatter.dateFormat = "MMMM d, YYYY"; let myDate = dateFormatter.stringFromDate (तारीख); और इसके ऊपर अगर मैं आपके एक्सटेंशन का इस तरह उपयोग करता हूं -> var myDate2 = myDate.toDateTime (); यह मुझे पूरी तरह से अलग तारीख दे रहा है और वर्तमान तारीख नहीं।
अर्जुन कालिदास

9

स्विफ्ट 3 के लिए

func stringToDate(_ str: String)->Date{
    let formatter = DateFormatter()
    formatter.dateFormat="yyyy-MM-dd hh:mm:ss Z"
    return formatter.date(from: str)!
}
func dateToString(_ str: Date)->String{
    var dateFormatter = DateFormatter()
    dateFormatter.timeStyle=DateFormatter.Style.short
    return dateFormatter.string(from: str)
}

5

इस QA पृष्ठ पर कोड अंश "उल्टा" हैं ...

पहली बात Apple का उल्लेख है कि आप अपने फ़ॉर्मेटर को कैश करते हैं ...

यह कैसे करना है यह बताते हुए कि Apple doco से लिंक करें:

दक्षता के लिए कैश फॉर्मेटर्स डेट फॉर्मेटर बनाना एक सस्ता ऑपरेशन नहीं है। ... कैश एक उदाहरण ...

एक वैश्विक उपयोग करें ...

let df : DateFormatter = {
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    return formatter 
}()

तो बस उस फ़ॉर्मेटर का कहीं भी उपयोग करें ...

let s = df.string(from: someDate)

या

let d = df.date(from: someString)

या DateFormatter पर किसी भी अन्य कई, कई सुविधाजनक तरीकों का उपयोग करें।

यह इतना आसान है।

(यदि आप स्ट्रिंग पर एक एक्सटेंशन लिखते हैं, तो आपका कोड पूरी तरह से "उल्टा" है - आप किसी भी तारीख को कॉल का उपयोग नहीं कर सकते हैं!)

ध्यान दें कि आमतौर पर आपके पास उन ग्लोबल्स में से कुछ होंगे .. जैसे कि "formatForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" आदि।


वैश्विक स्तर पर उन्हें छोड़ने की जरूरत नहीं है। आप फ़ॉर्मैटर का विस्तार कर सकते हैं बस अपने गुणों को स्थिर घोषित कर सकते हैं। इस stackoverflow.com/a/43658213/2303865 की
लियो डबस

4

स्विफ्ट समर्थन एक्सटेंशन, विस्तार के साथ आप के लिए एक नया कार्यक्षमता जोड़ सकते हैं एक मौजूदा class, structure, enumeration, याprotocol प्रकार।

आप कीवर्ड का उपयोग करके ऑब्जेक्ट को बढ़ाकर एक नया initफ़ंक्शन जोड़ सकते हैं ।NSDateextension

extension NSDate
{
    convenience
    init(dateString:String) {
        let dateStringFormatter = NSDateFormatter()
        dateStringFormatter.dateFormat = "yyyyMMdd"
        dateStringFormatter.locale = NSLocale(localeIdentifier: "fr_CH_POSIX")
        let d = dateStringFormatter.dateFromString(dateString)!
        self.init(timeInterval:0, sinceDate:d)
    }
} 

अब आप एक NSDate ऑब्जेक्ट का उपयोग कर सकते हैं:

let myDateObject = NSDate(dateString:"2010-12-15 06:00:00")

मुझे इनिट तरीका पसंद है। क्या टाइमइंटरवल का उपयोग किए बिना तारीख बनाने का एक और तरीका नहीं है? क्या होगा यदि nsdate डेट पैरामीटर के साथ इनिशलाइज़र रखना बंद कर देता है? आप इसे कैसे हल करेंगे? व्यक्तिगत रूप से मैं एक तरह से पसंद करता हूं, लेकिन मुझे नहीं पता कि इस समस्या को कैसे दूर किया जाए
Mijail

मेरे पास एक मुद्दा है: स्ट्रिंग के रूप में मेरी तारीख इस तरह है: "2017-03-10 22:16:00 +0000" और मैंने इस प्रारूप का उपयोग किया: "yyyy-MM-dd hh: mm: ss Z" और यह एक: "yyyy-mM-dd'T'HH: mm: ss"। लेकिन दोनों के लिए, जब मैं ऐसा करता हूं: शुरुआत करते हैं = df.date(from: beginDateString), मुझे एक शून्य मिलता है! क्यों? ( df = DateFormatter())
पॉल बेनेट्यू

4

स्विफ्ट 3 के बाद से, NS के कई उपसर्ग हटा दिए गए हैं।

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 
/* date format string rules
 * http://userguide.icu-project.org/formatparse/datetime
 */

let date = dateFormatter.date(from: dateString)

मेरे पास एक मुद्दा है: स्ट्रिंग के रूप में मेरी तारीख इस तरह है: "2017-03-10 22:16:00 +0000" और मैंने इस प्रारूप का उपयोग किया: "yyyy-MM-dd hh: mm: ss Z" और यह एक: "yyyy-mM-dd'T'HH: mm: ss"। लेकिन दोनों के लिए, जब मैं ऐसा करता हूं: शुरुआत करते हैं = df.date(from: beginDateString), मुझे एक शून्य मिलता है! क्यों? ( df = DateFormatter())
पॉल बेनेट्यू

4

स्विफ्ट 3,4:

2 उपयोगी रूपांतरण:

string(from: Date) // to convert from Date to a String
date(from: String) // to convert from String to Date

उपयोग: १।

let date = Date() //gives today's date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd.MM.yyyy"
let todaysDateInUKFormat = dateFormatter.string(from: date)

2।

 let someDateInString = "23.06.2017"
 var getDateFromString = dateFormatter.date(from: someDateInString)

3

स्विफ्ट के लिए 3.1

func convertDateStringToDate(longDate: String) -> String{

    /* INPUT: longDate = "2017-01-27T05:00:00.000Z"
     * OUTPUT: "1/26/17"
     * date_format_you_want_in_string from
     * http://userguide.icu-project.org/formatparse/datetime
     */

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    let date = dateFormatter.date(from: longDate)

    if date != nil {

        let formatter = DateFormatter()
        formatter.dateStyle = .short
        let dateShort = formatter.string(from: date!)

        return dateShort

    } else {

        return longDate

    }
}

नोट: इस त्रुटि को गलत तरीके से पूरा किया जाएगा


2

स्विफ्ट में डेट फॉर्मेट के भीतर स्ट्रिंग जोड़ने के लिए, मैंने यह किया

 var dataFormatter:NSDateFormatter = NSDateFormatter()
                dataFormatter.dateFormat = "dd-MMMM 'at' HH:mm a"

cell.timeStamplbl.text = dataFormatter.stringFromDate(object.createdAt)

2

मेरे लिए यह काम ।।

    import Foundation
    import UIKit

    //dateString = "01/07/2017"
    private func parseDate(_ dateStr: String) -> String {
            let simpleDateFormat = DateFormatter()
            simpleDateFormat.dateFormat = "dd/MM/yyyy" //format our date String
            let dateFormat = DateFormatter()
            dateFormat.dateFormat = "dd 'de' MMMM 'de' yyyy" //format return

            let date = simpleDateFormat.date(from: dateStr)
            return dateFormat.string(from: date!)
    }

1

नीचे कुछ स्ट्रिंग टू डेट फॉर्मेट कन्वर्सेशन ऑप्शन का इस्तेमाल किया जा सकता है, जिसमें तेज तर्रार iOS है।

  1. Thursday, Dec 27, 2018 प्रारूप = EEEE, MMM d, yyyy
  2. 12/27/2018 प्रारूप = MM/dd/yyyy
  3. 12-27-2018 09:59 प्रारूप = MM-dd-yyyy HH:mm
  4. Dec 27, 9:59 AM प्रारूप = MMM d, h:mm a
  5. December 2018 प्रारूप = MMMM yyyy
  6. Dec 27, 2018 प्रारूप = MMM d, yyyy
  7. Thu, 27 Dec 2018 09:59:19 +0000 प्रारूप = E, d MMM yyyy HH:mm:ss Z
  8. 2018-12-27T09:59:19+0000 प्रारूप = yyyy-MM-dd'T'HH:mm:ssZ
  9. 27.12.18 प्रारूप = dd.MM.yy
  10. 09:59:19.815 प्रारूप = HH:mm:ss.SSS

0
Swift: iOS
if we have string, convert it to NSDate,

var dataString = profileValue["dob"] as String
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy"

// convert string into date
let dateValue:NSDate? = dateFormatter.dateFromString(dataString)

if you have and date picker parse date like this

// to avoid any nil value
if let isDate = dateValue {
self.datePicker.date = isDate
}

0

आप इस स्विफ्ट कोड को आज़मा सकते हैं

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd/MM/yyyy"//same as strDate date formator
    dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00")//Must used if you get one day less in conversion
    let convertedDateObject = dateFormatter.date(from: strDate)

0

स्विफ्ट 5 , एक्सकोड 11.0

अपना दिनांक (स्ट्रिंग में तारीख) "डेटस्ट्रिंग" में और "डेटफ़ॉर्मेट" पास प्रारूप में पास करें जो आप चाहते हैं। प्रारूप चुनने के लिए, NDateFormatter वेबसाइट का उपयोग करें

func getDateFrom(dateString: String, dateFormat: String) -> Date? {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateFormat
    dateFormatter.locale = Locale(identifier: "en_US")
    guard let date = dateFormatter.date(from: dateString) else {return nil}
    return date
}

-3
import Foundation

let now : String = "2014-07-16 03:03:34 PDT"
var date : NSDate
var dateFormatter : NSDateFormatter

date = dateFormatter.dateFromString(now)

date // $R6: __NSDate = 2014-07-16 03:03:34 PDT

https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/index.html#//apple_ref/doc/uid/20000447-SW32


2
यह कैसे काम करना है? दिनांक फ़ॉर्मेटर को आरंभीकृत नहीं किया गया है और तिथि की घोषणा और आरंभ को विभाजित करने का कोई कारण नहीं है।
Ixx
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.