Swift में वर्तमान समय प्राप्त करना: 5 घातक गलतियाँ और उनका समाधान

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

समय सिर्फ संख्याएँ नहीं है: अनुभवी डेवलपर्स भी क्यों गलतियाँ करते हैं

\n\n

हर iOS डेवलपर को कभी न कभी इस काम का सामना करना पड़ता है: "बस वर्तमान समय प्राप्त करना है।" सोचने में कितना आसान लगता है, है ना? लेकिन यहीं पर, बिना किसी जटिलता के, नए (और अनुभवी) डेवलपर्स ऐसी गलतियाँ करते हैं जो बाद में बग्स, ऐप क्रैश और नाराज उपयोगकर्ताओं का कारण बनती हैं।

\n\n

इस लेख में हम Swift में वर्तमान समय के साथ काम करते समय पाँच सबसे सामान्य गलतियों पर चर्चा करेंगे, जिन्होंने Stack Overflow पर हज़ारों व्यूज़ बटोरे हैं। आप सीखेंगे कि इनसे कैसे बचें और साफ, विश्वसनीय कोड कैसे लिखें।

\n\n
"मैं बस Swift में वर्तमान समय को datetime के रूप में प्राप्त करना चाहता हूँ, लेकिन मुझे या तो nil मिलता है या वह नहीं जो मैंने उम्मीद की थी। मदद करें!" — फ़ोरम पर एक सामान्य आक्रोश।
\n\n

आइए जानें कि क्या गलत हो रहा है।

\n\n

1. DateFormatter के साथ गलती: लोकेल मुख्य दुश्मन है

\n\n

समस्या

\n

सबसे लोकप्रिय अनुरोध: "Swift get current time as datetime string"। डेवलपर लिखता है:

\n\n
let dateFormatter = DateFormatter()\ndateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"\nlet currentTime = dateFormatter.string(from: Date())\nprint(currentTime) // क्या सब काम कर रहा है? बिल्कुल नहीं
\n\n

सिम्युलेटर या अंग्रेज़ी लोकेल वाले डिवाइस पर सब ठीक है। लेकिन जैसे ही उपयोगकर्ता सेटिंग्स में जर्मन या हिंदी भाषा चुनता है, आपको nil या अप्रत्याशित फ़ॉर्मेट मिलता है।

\n\n

ऐसा क्यों होता है?

\n

डिफ़ॉल्ट रूप से, DateFormatter डिवाइस की वर्तमान लोकेल का उपयोग करता है। फिक्स्ड डेट फ़ॉर्मेट के लिए जो API में पार्स या प्रदर्शित होते हैं, यह एक आपदा है।

\n\n

समाधान

\n

हमेशा उन फ़ॉर्मेट के लिए en_US_POSIX लोकेल सेट करें जो उपयोगकर्ता को प्रदर्शित करने के लिए नहीं हैं:

\n\n
let dateFormatter = DateFormatter()\ndateFormatter.locale = Locale(identifier: "en_US_POSIX")\ndateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"\ndateFormatter.timeZone = TimeZone.current // समय क्षेत्र मत भूलें!\nlet currentTime = dateFormatter.string(from: Date())\nprint(currentTime) // "2024-12-25 14:30:00" — स्थिर
\n\n
याद रखें: en_US_POSIX Swift में फिक्स्ड डेट फ़ॉर्मेट के साथ काम करते समय आपका सबसे अच्छा दोस्त है।
\n\n

2. समय क्षेत्र (TimeZone) को अनदेखा करना

\n\n

समस्या

\n

आपको वर्तमान समय के साथ एक स्ट्रिंग मिली। लेकिन आपने वास्तव में कौन सा समय प्राप्त किया? स्थानीय? UTC? सर्वर का? यह गलती तब होती है जब डेवलपर DateFormatter में timeZone निर्दिष्ट नहीं करता।

\n\n

गलती का उदाहरण:

\n
let formatter = DateFormatter()\nformatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"\nlet now = formatter.string(from: Date())\n// परिणाम: "2024-12-25T14:30:00+0300" — यह ऑफ़सेट के साथ स्थानीय समय है\n// लेकिन अगर आपको हमेशा UTC चाहिए तो क्या होगा?
\n\n

समाधान

\n

हमेशा स्पष्ट रूप से TimeZone निर्दिष्ट करें:

\n\n
// सर्वर के साथ काम करने के लिए (UTC)\nlet utcFormatter = DateFormatter()\nutcFormatter.timeZone = TimeZone(abbreviation: "UTC")\nutcFormatter.locale = Locale(identifier: "en_US_POSIX")\nutcFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"\nlet utcTime = utcFormatter.string(from: Date())\nprint(utcTime) // "2024-12-25T11:30:00Z"\n\n// उपयोगकर्ता को दिखाने के लिए (उसका स्थानीय समय)\nlet localFormatter = DateFormatter()\nlocalFormatter.timeZone = TimeZone.current\nlocalFormatter.dateStyle = .medium\nlocalFormatter.timeStyle = .short\nlet localTime = localFormatter.string(from: Date())\nprint(localTime) // "25 दिस॰ 2024, 14:30"
\n\n

3. तुलना के लिए Date() का उपयोग: छिपे हुए खतरे

\n\n

समस्या

\n

कई लोग सोचते हैं कि Date() एक ही कॉल के भीतर एक ही मान लौटाता है। लेकिन ऐसा नहीं है। Swift Date समय का एक तत्काल स्नैपशॉट है। यदि आप कोड में दो बार Date() कॉल करते हैं, तो मान माइक्रोसेकंड में भिन्न हो सकते हैं।

\n\n


                
                

ब्लॉग

पुस्तक अनुशंसाएँ