সুইফটে তারিখ ফর্ম্যাট


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
ডেটফর্মেটর গেটের ডেটফর্ম্যাটটির জন্য 2 টি আলাদা ফর্ম্যাট গ্রহণ করতে হবে - একটি মিলিসেকেন্ডযুক্ত এবং একটি মিলিসেকেন্ড ছাড়াই? অর্থ্যাৎ yyyy-MM-dd'T'HH: মিমি: ssZZZZZ এবং yyyy-MM-dd'T'HH: মিমি: এসএস: এসএসজেডজেডজেড
কেভিএনএইচ

1
আমি মনে করি আপনাকে তারিখটি পেতে দুটি ভিন্ন তারিখফর্মেটর ঘোষণা করতে হবে: যদি প্রথমটি ব্যর্থ হয় (এটি শূন্য হবে), দ্বিতীয়টি ব্যবহার করুন।
লরেঞ্জ ওলিভেটো

আপনি কি দয়া করে আমাকে সাহায্য করতে পারেন, "মঙ্গল মার্চ 12 2019 12:00:00 GMT-0500 (সিডিটি)"
দেवेश

@ দেবেশ এটি "EEE এমএমএম ডি yyyy এইচ এইচ এমএম: এসএস জেডজেডজেড" এর মতো কিছু হওয়া উচিত, এনএসডিটেমফরম্যাটটার ডট কম দেখুন, এটি সমস্ত ফর্ম্যাট সমর্থিত
লরেঞ্জ অলিভটো

@ ফ্লোরেনজোলিভতো হ্যাঁ আমি এই ফর্ম্যাটটির জন্য সমস্তভাবে চেষ্টা করেছি আমি এনএসডিটেমফরম্যাটটার ডটকম-তেও চেষ্টা করেছি, এখনও, আমি "মঙ্গলবার 12 2019 12:00:00 GMT-0500 (সিডিটি)" এই ফর্ম্যাটটির জন্য কিছুই পেতে সক্ষম নই। আমি একটি JSON এ এই ফর্ম্যাটটি পাচ্ছি। আমি নিশ্চিত নই যে এটি বৈধ স্ট্রিং, আপনি দয়া করে আমাকে সহায়তা করতে পারেন।
দেवेश

211

যারা ডেটফর্ম্টার.ডেটফর্ম্যাট ব্যবহার করতে চান তাদের পক্ষে এটি কার্যকর হতে পারে; যদি আপনি চান 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
আপনার উত্তরটি এত আলোকিত করেছে এবং আমার সমস্যাটি স্থির করেছে। ধন্যবাদ.
অ্যান্ড্রুকার

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

আপনি যখন নিজের অ্যাপ্লিকেশনটি স্থানীয় করতে চান এটিও সহায়ক। লোকেল (সনাক্তকারী:) আইএসও 63৩৯-১ কোড ব্যবহার করে । আরও দেখুন অ্যাপল ডকুমেন্টেশন


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!))

সম্পাদনা: মিতুল-নাকুম পরামর্শের পরে


2
ডেটফর্মেটরগেট.ডেটফরমেট = "yYYY-MM-dd এইচ এইচ: মিমি: ss" ঘন্টা ফর্মেটের জন্য মূলধন এইচএইচ প্রয়োজন হবে, কারণ ঘন্টা 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। এই পার্থক্যটি ডিএসটি দ্বারা সৃষ্ট: গ্রীষ্মে জার্মানি GMT + 2, শীতকালে এটি GMT + 1।
নেফ

4

আপনি যদি "1996-12-19T16: 39: 57-08: 00" থেকে তারিখটি বিশ্লেষণ করতে চান তবে নীচের বিন্যাসটি "yyyy-MM-dd'T'HH: মিমি: 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)

অ্যাপল থেকে https://developer.apple.com/docamentation/foundation/dateformatter


3

ফর্ম্যাট তারিখের আরেকটি আন্তঃসুত্থক সম্ভাবনা। এই স্ক্রিনশটটি অ্যাপলের অ্যাপ "নিউজ" এর অন্তর্গত।

অ্যাপের স্ক্রিনশট

কোডটি এখানে:

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)

Lorenzoliveto দ্বারা প্রস্তাবিত বিকল্প যোগ করার কিছুই নেই। এটা ঠিক নিখুঁত।

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

"EEEE \ nMMMM ডিডি" ফর্ম্যাট সহ এটি কেবলমাত্র একটি তারিখের ফর্ম্যাটর ব্যবহার করে সংক্ষিপ্ত করা যেতে পারে।
লোরেঞ্জ ওলিভটো

ধন্যবাদ. আমি এই সিনট্যাক্সটি জানতাম না। খুব দরকারী! আপনাকে অনেক ধন্যবাদ!
মার্কাস

পুনঃনির্ধারণ: আমি কোডটি পরীক্ষা করেছি তবে আপনি বড় হাতের অক্ষরগুলি পান না।
মার্কাস

1
হ্যাঁ, আপনার উত্তরের মতো ফিরে আসা স্ট্রিংয়ের ক্ষেত্রে বড় হাতের অক্ষর প্রয়োগ করতে হবে। তারিখ বিন্যাসটি বড় হাতের স্ট্রিং ফেরত দেয় না। শুধু যোগ .uppercased () ভালো "। DateFormat.string (থেকে: তারিখ ()) uppercased ()"
LorenzOliveto

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 এর জন্য

আপনি যেভাবেই চান তারিখ এবং ফর্ম্যাট পাস করুন। আপনি যে ফর্ম্যাটটি দেখতে পারেন তা চয়ন করতে, এনএসডেফর্মিটার ওয়েবসাইট :

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 এর জন্য একটি উদাহরণ দেখাব new নতুন এক্সটেনশন ফাইল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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.