2014-07-02 4 views
12

मेरे पास एक तिथि है "2014-07-02 20:57:38 +0000" और मैं इसे "आज 8:57 बजे" प्रारूपित करना चाहता हूं। मैं चाहता हूं कि यदि एक स्ट्रिंग कल है, तो इसे "कल 9:00 बजे" के रूप में प्रदर्शित करें। यदि यह न तो आज या कल है, तो वास्तव में दिनांक "27/6 को 7:53 बजे" दिखाएं।"आजकल xx: xx pm", "कल xx: xx am" जैसी मानव भाषा के साथ दिनांक कैसे प्रदर्शित करें?

मैं नीचे दिए गए कोड के साथ "8:57 पूर्वाह्न" प्रारूप के साथ समय प्राप्त करने में सक्षम था।

  var formatter : NSDateFormatter = NSDateFormatter() 
      formatter.dateFormat = "h:mm a" 

      // message.createdAt is the date 
      let dateString = formatter.stringFromDate(message.createdAt) 
      println(dateString) 

      //output = 8:57 AM 

हालांकि, जब मैं निम्नलिखित कोड का उपयोग करता हूं, तो यह एक खाली स्ट्रिंग देता है।

  var formatter : NSDateFormatter = NSDateFormatter() 
      formatter.dateFormat = "h:mm a" 
      formatter.doesRelativeDateFormatting = true //<-- This doesn't work 

      let dateString = formatter.stringFromDate(message.createdAt) 
      println(dateString) 

      //output = (nothing, its a blank string) 

मैं यह काम कैसे कर सकता हूं और स्विफ्ट में "आज" या "कल" ​​प्रदर्शित करूं?

+0

** स्विफ्ट 3 उत्तर: ** https://stackoverflow.com/a/46027060/3400991 –

उत्तर

16

कारण यह खाली है कि आपके दिनांक प्रारूप में केवल समय घटक हैं। .doesRelativeDateFormatting के साथ संयुक्त जो आपको खाली स्ट्रिंग देता है। आपको लगता है कि कस्टम समय प्रारूप चाहते हैं, मुझे लगता है कि आप की तारीख और समय के लिए अलग formatters की जरूरत है:

let now = NSDate() 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateStyle = .MediumStyle 
dateFormatter.doesRelativeDateFormatting = true 

let timeFormatter = NSDateFormatter() 
timeFormatter.dateFormat = "h:mm a" 

let time = "\(dateFormatter.stringFromDate(now)), \(timeFormatter.stringFromDate(now))" 
println(time)  // prints "Today, 5:10 PM" 
+2

वास्तव में आप केवल एक की जरूरत है। आप इसे पसंद कर सकते हैं: वर फ़ॉर्मेटर: NSDateFormatter = NSDateFormatter() formatter.dateStyle = NSDateFormatterStyle.ShortStyle formatter.timeStyle = NSDateFormatterStyle.ShortStyle formatter.doesRelativeDateFormatting = सच वर डेटस्ट्रिंग = formatter.stringFromDate (NSDate()) –

+0

यह समाधान ज्यादातर समय क्षेत्र और गर्मी/सर्दियों के समय के लिए सही समय प्रदान नहीं करता है। नीचे इंकसी समाधान देखें। – Vincent

4

दें कि यह एक कोशिश

let dateFormatter = NSDateFormatter() 
dateFormatter.dateStyle = .ShortStyle 
dateFormatter.timeStyle = .ShortStyle 
dateFormatter.doesRelativeDateFormatting = true 

let date = NSDate() 
let dateString = dateFormatter.stringFromDate(date) 
+0

यह कहता है "NSDateFormatter में स्थानीयकृतस्टिंगफ्रॉमडेट नामक कोई सदस्य नहीं है" –

+0

@ हेनरीगन क्षमा करें, यह समझ में नहीं आया कि अब एक क्लास विधि है, जो अब संपादन में तय है –

5
स्विफ्ट 3 के साथ

, एप्पल डेवलपर API संदर्भ में कहा गया है DateFormatter के बारे में के dateFormat संपत्ति:

जब, निश्चित प्रारूप अभ्यावेदन के साथ काम कर के रूप में Working With Fixed Format Date Representations में चर्चा की आप केवल इस संपत्ति स्थापित करना चाहिए। उपयोगकर्ता-दृश्य प्रस्तुतिकरणों के लिए, आपको dateStyle और timeStyle गुणों का उपयोग करना चाहिए, या setLocalizedDateFormatFromTemplate(_:) विधि यदि आपका वांछित प्रारूप पूर्वनिर्धारित शैलियों का उपयोग करके हासिल नहीं किया जा सकता है; इन दोनों गुणों और इस विधि उपयोगकर्ता को प्रदर्शित करने के लिए उपयुक्त स्थानीय दिनांक प्रतिनिधित्व प्रदान करते हैं।

रिसीवर की तारीख शैली:


DateFormatterdateStyle संपत्ति निम्नलिखित घोषणा की है।

रिसीवर के समय शैली:

var dateStyle: DateFormatter.Style { get set } 

उसी तरह, DateFormattertimeStyle संपत्ति निम्नलिखित घोषणा की है।

var timeStyle: DateFormatter.Style { get set } 

ध्यान दें कि DateFormatter.Style निम्नलिखित मामलों के साथ एक enum है: none, short, medium, long, full

भी ध्यान रखें कि doesRelativeDateFormatting केवल काम करता है जब आप के लिए आप DateFormatter उदाहरण dateStyle और/या timeStyle निर्धारित किया है।


कैसे DateFormatterdateStyle और timeStyle गुण का उपयोग कर वांछित प्रारूप में अपनी तिथियाँ प्रदर्शित करने के लिए निम्नलिखित खेल का मैदान कोड शो।

import Foundation 

let now = Date() // 2017-03-12 14:53:34 +0000 
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: now)! // 2017-03-11 14:53:34 +0000 
let aWeekAgo = Calendar.current.date(byAdding: .weekOfMonth, value: -1, to: now)! // 2017-03-05 14:53:34 +0000 

let dateFormatter = DateFormatter() 
dateFormatter.dateStyle = .long 
dateFormatter.timeStyle = .short 
dateFormatter.doesRelativeDateFormatting = true 

let nowString = dateFormatter.string(from: now) 
print(nowString) // prints: Today at 3:53 PM 

let yesterdayString = dateFormatter.string(from: yesterday) 
print(yesterdayString) // prints: Yesterday at 3:53 PM 

let aWeekAgoString = dateFormatter.string(from: aWeekAgo) 
print(aWeekAgoString) // prints: March 5, 2017 at 3:53 PM 
संबंधित मुद्दे