स्विफ्ट में दिनांक प्रारूप


150

मैं इस डेटटाइम को दिनांक से कैसे परिवर्तित करूंगा?

इससे: 2016-02-29 12:24:26
से: फ़रवरी 29, 2016

अब तक, यह मेरा कोड है और यह शून्य मान लौटाता है:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy"
dateFormatter.timeZone = NSTimeZone(name: "UTC")
let date: NSDate? = dateFormatter.dateFromString("2016-02-29 12:24:26")
print(date)

जवाबों:


267

आपको 2 अलग-अलग घोषित करने होंगे NSDateFormatters, पहला, स्ट्रिंग को एक में बदलना NSDateऔर दूसरा आपके प्रारूप में तारीख को प्रिंट करना।
इस कोड को आज़माएं:

let dateFormatterGet = NSDateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss"

let dateFormatterPrint = NSDateFormatter()
dateFormatterPrint.dateFormat = "MMM dd,yyyy"

let date: NSDate? = dateFormatterGet.dateFromString("2016-02-29 12:24:26")
print(dateFormatterPrint.stringFromDate(date!))

स्विफ्ट 3 और उच्चतर:

स्विफ्ट से 3 NSDateवर्ग के लिए बदल दिया गया है Dateऔर NSDateFormatterकरने के लिए DateFormatter

let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss"

let dateFormatterPrint = DateFormatter()
dateFormatterPrint.dateFormat = "MMM dd,yyyy"

if let date = dateFormatterGet.date(from: "2016-02-29 12:24:26") {
    print(dateFormatterPrint.string(from: date))
} else {
   print("There was an error decoding the string")
}

1
क्या होता है अगर dateFormatterGet dateFormat को 2 अलग-अलग प्रारूपों को स्वीकार करने की आवश्यकता होती है - एक मिलीसेकंड और एक बिना मिलीसेकंड? यानी yyyy-MM-dd'T'HH: mm: ssZZZZZ और yyyy-MM-dd'T'HH: mm: ss: SSSZZZZZ
Kvnz

1
मुझे लगता है कि आपको तिथि प्राप्त करने के लिए दो अलग-अलग DateFormatters घोषित करना होगा: यदि पहला विफल हो जाता है (यह शून्य वापस आ जाएगा), दूसरे का उपयोग करें।
लॉरेंजऑलिव्टो

क्या आप मेरी मदद कर सकते हैं, "Tue Mar 12 2019 12:00:00 GMT-0500 (CDT)" के लिए तारीख का प्रारूप क्या होगा
देवेश

@ यह कुछ इस तरह होना चाहिए "EEE MMM d yyyy HH: mm: ss ZZZZ ", nsdateformatter.com देखें यह समर्थित सभी प्रारूपों के साथ एक बहुत ही हानिकारक साइट है
लोरेंजेलिवेवेटो

@lorenzoliveto हाँ, मैंने इस प्रारूप के लिए सभी तरह की कोशिश की है जो मैंने nsdateformatter.com पर भी आजमाई है, फिर भी, मैं "Tue Mar 12 2019 12:00:00 GMT-0500 (CDT)" इस प्रारूप के लिए कुछ भी प्राप्त नहीं कर पा रहा हूँ। मुझे यह फॉर्मेट JSON में मिल रहा है। मुझे यकीन नहीं है कि यह वैध स्ट्रिंग है, क्या आप कृपया मेरी मदद कर सकते हैं।
देवेश

212

यह जो dateformater.dateformat का उपयोग करना चाहते हैं के लिए उपयोगी हो सकता है; यदि आप चाहते हैं कि 12.09.18आप का उपयोग करेंdateformater.dateformat = "dd.MM.yy"

Wednesday, Sep 12, 2018           --> EEEE, MMM d, yyyy
09/12/2018                        --> MM/dd/yyyy
09-12-2018 14:11                  --> MM-dd-yyyy HH:mm
Sep 12, 2:11 PM                   --> MMM d, h:mm a
September 2018                    --> MMMM yyyy
Sep 12, 2018                      --> MMM d, yyyy
Wed, 12 Sep 2018 14:11:54 +0000   --> E, d MMM yyyy HH:mm:ss Z
2018-09-12T14:11:54+0000          --> yyyy-MM-dd'T'HH:mm:ssZ
12.09.18                          --> dd.MM.yy
10:41:02.112                      --> HH:mm:ss.SSS

2
आपका जवाब इतना रोशन करने वाला और मेरे मुद्दे को तय करने वाला है। धन्यवाद।
andrewcar

50

स्विफ्ट 3 और उच्चतर

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
dateFormatter.locale = Locale(identifier: "en_US")
print(dateFormatter.string(from: date)) // Jan 2, 2001

यह तब भी मददगार होता है जब आप अपने ऐप को स्थानीय बनाना चाहते हैं। लोकेल (पहचानकर्ता :) आईएसओ 639-1 कोड का उपयोग करता है । Apple दस्तावेज़ीकरण भी देखें


8
यदि आप अपने ऐप को स्थानीय बनाना चाहते हैं, Locale.currentतो उपयोगकर्ता के स्थान का उपयोग करने के लिए उपयोग करें।
विक्टर एंगेल

46

स्विफ्ट - 5.0

let date = Date()
let formate = date.getFormattedDate(format: "yyyy-MM-dd HH:mm:ss") // Set output formate

extension Date {
   func getFormattedDate(format: String) -> String {
        let dateformat = DateFormatter()
        dateformat.dateFormat = format
        return dateformat.string(from: self)
    }
}

स्विफ्ट - 4.0

2018-02-01T19: 10: 04 + 00: 00 फरवरी 01,2018 परिवर्तित

extension Date {
    static func getFormattedDate(string: String , formatter:String) -> String{
        let dateFormatterGet = DateFormatter()
        dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"

        let dateFormatterPrint = DateFormatter()
        dateFormatterPrint.dateFormat = "MMM dd,yyyy"

        let date: Date? = dateFormatterGet.date(from: "2018-02-01T19:10:04+00:00")
        print("Date",dateFormatterPrint.string(from: date!)) // Feb 01,2018
        return dateFormatterPrint.string(from: date!);
    }
}

36

Dateइसके बजाय नई वस्तु के साथ 3 संस्करण स्विफ्ट करेंNSDate :

let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss"

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM dd,yyyy"

let date: Date? = dateFormatterGet.date(from: "2017-02-14 17:24:26")
print(dateFormatter.string(from: date!))

EDIT: मितुल-नकुम सुझाव के बाद


2
dateFormatterGet.dateFormat = "yyyy-MM-dd HH: mm: ss" घंटे फॉर्मेट के लिए पूंजी HH की आवश्यकता होगी, क्योंकि घंटा 24 फॉर्मेट में है
मितुल नाकुम

22

स्विफ्ट 3

let date : Date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy"
let todaysDate = dateFormatter.string(from: date)

16

मैंने अपनी समस्या को प्रारूप के साथ हल किया yyyy-MM-dd'T'HH:mm:ss.SSS'Z'(उदाहरण 2018-06-15T00: 00: 00.000Z) इसके साथ:

func formatDate(date: String) -> String {
   let dateFormatterGet = DateFormatter()
   dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

   let dateFormatter = DateFormatter()
   dateFormatter.dateStyle = .medium
   dateFormatter.timeStyle = .none
   //    dateFormatter.locale = Locale(identifier: "en_US") //uncomment if you don't want to get the system default format.

   let dateObj: Date? = dateFormatterGet.date(from: date)

   return dateFormatter.string(from: dateObj!)
}

9

Dateएक्सटेंशन के साथ स्विफ्ट 3

extension Date {
    func string(with format: String) -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        return dateFormatter.string(from: self)
    }
}

तो आप इसे इस तरह से उपयोग कर सकते हैं:

let date = Date()
date.string(with: "MMM dd, yyyy")

8

स्विफ्ट 4, 4.2 और 5

func getFormattedDate(date: Date, format: String) -> String {
        let dateformat = DateFormatter()
        dateformat.dateFormat = format
        return dateformat.string(from: date)
}

let formatingDate = getFormattedDate(date: Date(), format: "dd-MMM-yyyy")
        print(formatingDate)

1
यह सिर्फ एक एकल के साथ एक अच्छा, छोटा समाधान है DateFormatter()! कुछ के बारे में पता होना: यह DateFormatterभी आवेदन क्षेत्र (योजना में निर्धारित) को ध्यान में रखता है! जैसे 2019-05-27 11:03:03 +0000प्रारूप yyyy-MM-dd HH:mm:ssऔर "जर्मनी" क्षेत्र के रूप में बदल जाता है 2019-05-27 13:03:03। यह अंतर डीएसटी के कारण होता है: गर्मियों में जर्मनी जीएमटी + 2 है, जबकि सर्दियों में यह जीएमटी + 1 है।
नेफा

4

यदि आप "1996-12-19T16: 39: 57-08: 00" से तिथि पार्स करना चाहते हैं, तो निम्न प्रारूप "yyyy-MM-dd'T'HH: mm: ssZZZZZ" का उपयोग करें:

let RFC3339DateFormatter = DateFormatter()
RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX")
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0)

/* 39 minutes and 57 seconds after the 16th hour of December 19th, 1996 with an offset of -08:00 from UTC (Pacific Standard Time) */
let string = "1996-12-19T16:39:57-08:00"
let date = RFC3339DateFormatter.date(from: string)

Apple से https://developer.apple.com/documentation/foundation/dateformatter


3

प्रारूप तिथि की एक और निरंतर संभावना। यह स्क्रीनशॉट Apple के ऐप "न्यूज़" का है।

ऐप स्क्रीनशॉट

यहाँ कोड है:

let dateFormat1 = DateFormatter()
dateFormat1.dateFormat = "EEEE"
let stringDay = dateFormat1.string(from: Date())

let dateFormat2 = DateFormatter()
dateFormat2.dateFormat = "MMMM"
let stringMonth = dateFormat2.string(from: Date())

let dateFormat3 = DateFormatter()
dateFormat3.dateFormat = "dd"
let numDay = dateFormat3.string(from: Date())

let stringDate = String(format: "%@\n%@ %@", stringDay.uppercased(), stringMonth.uppercased(), numDay)

लॉरेंजोलिव्टो द्वारा प्रस्तावित वैकल्पिक में जोड़ने के लिए कुछ भी नहीं है। यह एकदम सही है।

let dateFormat = DateFormatter()
dateFormat.dateFormat = "EEEE\nMMMM dd"
let stringDate = dateFormat.string(from: Date()).uppercased()

इसे "EEEE \ nMMMM dd" प्रारूप के साथ केवल एक दिनांक फ़ॉर्मेटर का उपयोग करके संकुचित किया जा सकता है।
लॉरेंजऑलिव्टो

धन्यवाद। मुझे इस वाक्य-विन्यास का पता नहीं था। बहुत उपयोगी! आपका बहुत बहुत धन्यवाद!
मार्कस

संबंध: मैंने कोड का परीक्षण किया है लेकिन आप अपरकेस में पत्र प्राप्त नहीं करते हैं।
मार्कस

1
हां, आपके उत्तर में दिए गए स्ट्रिंग पर अपरकेस लागू किया जाना चाहिए। दिनांक फ़ॉर्मेटर अपरकेस स्ट्रिंग नहीं लौटाता है। बस इस तरह से .upercased () को जोड़ें "dateFormat.string (से: दिनांक ())। अपरकेस ()"
लोरेंजऑलिवेटो

3
    import UIKit
    // Example iso date time
    let isoDateArray = [
        "2020-03-18T07:32:39.88Z",
        "2020-03-18T07:32:39Z",
        "2020-03-18T07:32:39.8Z",
        "2020-03-18T07:32:39.88Z",
        "2020-03-18T07:32:39.8834Z"
    ]


    let dateFormatterGetWithMs = DateFormatter()
    let dateFormatterGetNoMs = DateFormatter()

// Formater with and without millisecond 
    dateFormatterGetWithMs.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
    dateFormatterGetNoMs.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"

    let dateFormatterPrint = DateFormatter()
    dateFormatterPrint.dateFormat = "MMM dd,yyyy"

    for dateString in isoDateArray {
        var date: Date? = dateFormatterGetWithMs.date(from: dateString)
        if (date == nil){
            date = dateFormatterGetNoMs.date(from: dateString)
        }
        print("===========>",date!)
    }

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह समस्या का हल कैसे और / या इसके बारे में अतिरिक्त संदर्भ प्रदान करता है, इससे उत्तर के दीर्घकालिक मूल्य में सुधार होगा।
पिओट्र लेबुन्स्की

2

2016-02-29 12:24:26 को एक तिथि में बदलने के लिए, इस तिथि फ़ॉर्मेटर का उपयोग करें:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"

संपादित करें: आउटपुट प्राप्त करने के लिए 29 फरवरी, 2016 इस तिथि फ़ॉर्मेटर का उपयोग करें:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy"

लेकिन आप इसे कैसे बदलेंगे इस तरह की तारीख प्रारूप 29 फरवरी, 2016
सिडनी लॉटेरिया

क्या आप जानते हैं कि जब मैं इसे प्रिंट करने की कोशिश करता हूं तो मुझे शून्य क्यों मिलता है?
पावलोस

2

दिनांक प्रारूप को परिवर्तित करने के लिए नीचे दिए गए फ़ंक्शन का उपयोग करें: -

  let convertedFormat =  convertToString(dateString: "2019-02-12 11:23:12", formatIn: "yyyy-MM-dd hh:mm:ss", formatOut: "MMM dd, yyyy")    //calling function

   print(convertedFormat) // feb 12 2019


 func convertToString (dateString: String, formatIn : String, formatOut : String) -> String {

    let dateFormater = DateFormatter()
    dateFormater.timeZone = NSTimeZone(abbreviation: "UTC") as TimeZone!
    dateFormater.dateFormat = formatIn
    let date = dateFormater.date(from: dateString)

    dateFormater.timeZone = NSTimeZone.system

    dateFormater.dateFormat = formatOut
    let timeStr = dateFormater.string(from: date!)
    return timeStr
 }

1

स्विफ्ट 4.2 के लिए, 5

तारीख और प्रारूप को पास करें जो भी आप चाहते हैं। आप जो प्रारूप देख सकते हैं, उसे चुनने के लिए NSDATEFORMATTER वेबसाइट :

static func dateFormatter(date: Date,dateFormat:String) -> String {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateFormat
    return dateFormatter.string(from: date)
}

0

स्विफ्ट 3

func dataFormat(dataJ: Double) -> String {

        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .long
        dateFormatter.timeStyle = .none
        let date = Date(timeIntervalSince1970: dataJ)
        return (dataJ != nil) ? "Today, \(dateFormatter.string(from: date))" : "Date Invalid"

    }

0

इसे विस्तार में रखें और नीचे की तरह कॉल करें। यह पूरे एप्लिकेशन में उपयोग करना आसान है।

self.getFormattedDate(strDate: "20-March-2019", currentFomat: "dd-MMM-yyyy", expectedFromat: "yyyy-MM-dd")

कार्यान्वयन

func getFormattedDate(strDate: String , currentFomat:String, expectedFromat: String) -> String{
        let dateFormatterGet = DateFormatter()
        dateFormatterGet.dateFormat = currentFomat

        let date : Date = dateFormatterGet.date(from: strDate)!

        dateFormatterGet.dateFormat = expectedFromat
        return dateFormatterGet.string(from: date)
    }

0

मैं डिफ़ॉल्ट रूप से टाइमज़ोन जोड़ने की सलाह देता हूं। मैं स्विफ्ट 5
1. नई एक्सटेंशन फ़ाइल के लिए एक उदाहरण दिखाऊंगाDate+Formatter.swift

import Foundation

extension Date {
    func getFormattedDateString(format: String) -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        dateFormatter.timeZone = TimeZone.current
        return dateFormatter.string(from: self)
    }
}
  1. उदाहरण का उपयोग करें
    let date = Date()
    let dateString = date.getFormattedDateString(format: "yyyy-MM-dd HH:mm:ss")
    print("dateString > \(dateString)")
    // print
    // dateString > 2020-04-30 15:15:21
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.