আমি কীভাবে স্ট্রিং ডেটকে এনএসডিটে রূপান্তর করতে পারি?


195

আমি "2014-07-15 06: 55: 14.198000 + 00: 00" এই স্ট্রিংয়ের তারিখটিকে সুইফটে এনএসডেটে রূপান্তর করতে চাই।


আপনার স্ট্রিংয়ের মতো দেখে মনে হচ্ছে "2014-07-15 06: 55: 14.198000 + 00: 00" আপনি এনএসডিট ফরমেটার ব্যবহার করলে অ্যাক্সেসযোগ্য হয় না
অ্যালেক্স পেদা

userguide.icu-project.org/formatparse/datetime আমাকে অনেক সাহায্য করেছে
Shardul

নীচের সমস্ত উত্তরগুলির সহচর সংস্থান হিসাবে, আমি nsdateformatter.com
ইউজার 3344977

এখানে পুরানো উত্তরগুলি সত্যই ভুল । অ্যাপল ডকো বলেছেন ক্রিস্টাল সাফ আপনার ফরম্যাটরটি ক্যাশে করতে হবে। stackoverflow.com/a/42370648/294884
ফ্যাটি

উত্তর:


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 */)

আরও প্রশ্নের জন্য, এনএসডিট ফরমেটার এবং ডেটফরম্যাটর ক্লাসগুলি যথাক্রমে অবজেক্টিভ-সি এবং সুইফটের জন্য ফাউন্ডেশন কাঠামোর চেক করুন ।

সুইফট 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" এই তারিখ বিন্যাস
Shardul

1
আমার এই "2014-07-15 06: 55: 14-0400" এর মতো একটি তারিখ স্ট্রিং রয়েছে এবং আমি ব্যবহার করার চেষ্টা করেছি yyyy-MM-dd hh:mm:ssZZZ। তবে আমি তারিখের অবজেক্টটি স্ট্রিংয়ের বাইরে আনতে পারছি না।
আইম্প্রেম

2
@ প্রিম, আপনি যদি দেখেন যে আউটপুটটি "2014-07-15 10:55:14 +0000"সঠিক হবে। থেকে হিসাবে NSDateবর্ণনা তারিখ আউটপুট পার্থক্য (এখানে, জিএমটি -4 ঘন্টা) সঙ্গে গণনা করা হবে। আপনি যদি GMT এবং UTC এর মধ্যে পার্থক্য পেতে চান যা -0400এই রেফারেন্সটি
x4h1d

@ x4h1 ডি, আরে আমি পেয়েছি! আমি একটি ভুল করেছি hhযা হওয়া উচিত HH। ধন্যবাদ!
আইম্প্রেম

3
@ লিগিগুয়েভার্গাসফ, আমার মনে হয় এটি হবে 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অন্যথায়, পার্সড তারিখটি জানুয়ারিতে আটকে গেছে - আমি পরিবর্তনের প্রতিফলনের উত্তরটি আপডেট করেছি।
জোড়ায়ার

আমি যদি বর্তমান তারিখটি স্ট্রিং হিসাবে পাস করতে চাই তবে কী হবে। এই কাজ করবে?
অর্জুন কালিদাস

@ জোড়ায়ার, কিতিসাক: আমি আউটপুট পাচ্ছি, ptionচ্ছিক (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, এক্সকোড 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

যদি আপনার প্রায়শই একটি তারিখে স্ট্রিংটিকে বিশ্লেষণের প্রয়োজন হয় তবে আপনি কার্যকারিতাটি কোনও এক্সটেনশনে স্থানান্তর করতে চাইতে পারেন। আমি একটি শেয়ারডকোড.সুইফ্ট ফাইল তৈরি করেছি এবং আমার এক্সটেনশানগুলি সেখানে রেখেছি:

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 () পরীক্ষার ডেটা সেট আপ করার সময় আমি এই সহজ হাতে পেয়েছি।
স্টিফেন ওয়াটসন

1
আমি বেশ নিশ্চিত যে এই ক্ষেত্রে hhহওয়া উচিত HH
অ্যালেক্স

এটি আমার নির্দিষ্ট করা ফর্ম্যাটটিতে দেয় না: var তারিখ = এনএসডিট (); লেট ডেট ফরমেটার = এনএসডিট ফরমেটার (); তারিখফর্মেটর.ডেটফর্ম্যাট = "এমএমএমএম ডি, ওয়াইওয়াইওয়াই"; চলুন myDate = তারিখের ফর্ম্যাটর.স্ট্রিংফ্রমেডেট (তারিখ); এবং এর উপরে যদি আমি আপনার এক্সটেনশনটি এর মতো ব্যবহার করি -> 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

এই কিউএ পৃষ্ঠায় কোড খণ্ডগুলি "উল্টোদিকে" ...

অ্যাপল প্রথম যে বিষয়টি উল্লেখ করেছে তা হ'ল আপনি নিজের বিন্যাসটি ক্যাশে ...

ঠিক কীভাবে এটি করবেন তা উল্লেখ করে অ্যাপল ডকো লিঙ্ক:

দক্ষতার জন্য ক্যাশে ফরমেটারগুলি একটি তারিখ বিন্যাস তৈরি করা কোনও সস্তা অপারেশন নয়। ... একক উদাহরণে ক্যাশে ...

একটি বিশ্বব্যাপী ব্যবহার করুন ...

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)

অথবা ডেটফোর্ডারে অন্য অনেকগুলি, অনেক সুবিধাজনক পদ্ধতি ব্যবহার করুন।

এটা যে সহজ।

(আপনি যদি স্ট্রিংয়ে একটি এক্সটেনশন লিখেন তবে আপনার কোডটি সম্পূর্ণ "উল্টো দিকে" - আপনি কোনও ডেটফর্মেটর কল ব্যবহার করতে পারবেন না!)

নোট করুন যে সাধারণত আপনার কাছে সেই কয়েকটি গ্লোবাল থাকবে .. যেমন "ফর্ম্যাটফোর্ডক্লিয়েন্ট" "ফর্ম্যাটপববনব" "ফর্ম্যাটফরডস্কিপঅনআইভয়েসস্ক্রিন" .. ইত্যাদি etc.


এগুলিকে বৈশ্বিক পরিসরে ফেলে রাখার দরকার নেই। আপনি ফর্ম্যাটর প্রসারিত করতে পারেন কেবল আপনার সম্পত্তি স্থির ঘোষণা। এই পরীক্ষা stackoverflow.com/a/43658213/2303865
লিও Dabus

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

এখন আপনি এনএসডিট অবজেক্টটি ব্যবহার করে সূচনা করতে পারেন:

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

আমি দিশা উপায় পছন্দ। সময়সীমা অবলম্বন না করে তারিখটি তৈরি করার অন্য কোনও উপায় নেই? কী হবে যদি এনএসডিট একটি ডেট প্যারামিটারের সাথে একটি প্রাথমিককরণ বন্ধ করে দেয়? কীভাবে সমাধান করবেন? ব্যক্তিগতভাবে আমি একটি আরম্ভের উপায় পছন্দ করি তবে এই সমস্যাটি কীভাবে কাটিয়ে উঠতে হয় তা আমি জানি না
মিজাইল

আমার একটি সমস্যা রয়েছে: স্ট্রিং হিসাবে আমার তারিখটি এরকম: "2017-03-10 22:16:00 +0000" এবং আমি এই ফর্ম্যাটটি ব্যবহার করেছি: "yyyy-MM-dd hh: mm: ss Z" এবং এটি: "YYYY-mM-dd'T'HH: মি: সে"। তবে উভয়ের জন্যই, যখন আমি এটি করি: আরম্ভ করুন তারিখ = df.date(from: beginDateString), আমি একটি শূন্যতা পাই! কেন? ( df = DateFormatter())
পল বুনতেউ

4

সুইফ্ট 3-এর পর থেকে অনেকগুলি এনএস উপসর্গ বাদ পড়েছে।

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: মি: সে"। তবে উভয়ের জন্যই, যখন আমি এটি করি: আরম্ভ করুন তারিখ = 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

ব্যবহার: 1।

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

সুইফটের জন্য ৩.১

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

    }
}

দ্রষ্টব্য: ত্রুটি থাকলে এই মূল STRING ফিরিয়ে দেবে


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

নীচে কিছু স্ট্রিং থেকে ডেট ফর্ম্যাট রূপান্তরকরণ বিকল্পগুলি সুইফট আইওএস ব্যবহার করা যেতে পারে।

  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

আপনার (স্ট্রিংয়ের তারিখ) "ডেটস্ট্রিং" এবং "ডেটফর্ম্যাট" পাস ফর্ম্যাটে আপনি চান পাস করুন। ফর্ম্যাট চয়ন করতে, এনডিট ফরমেটার ওয়েবসাইটটি ব্যবহার করুন ।

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