खोज…
वाक्य - विन्यास
- NSDate () // वर्तमान दिनांक और समय के लिए NSDate ऑब्जेक्ट init
- NSDate ()। TimeIntervalSince1970 // वर्तमान दिनांक और समय 00:00:00 UTC से 1 जनवरी 1970 को।
- NSDate ()। तुलना (अन्य: NSDate) // वर्तमान तिथि की तुलना किसी अन्य दिनांक को लौटाता है एक
NSComparisonResult
टिप्पणियों
विभिन्न प्रकार के दिनांक प्रारूप हैं जिन्हें आप सेट कर सकते हैं: यहां उनकी पूरी सूची है।
स्वरूप | अर्थ / विवरण | उदाहरण 1 | example2 |
---|---|---|---|
y | कम से कम 1 अंक वाला एक वर्ष। | 175 ई। → "175" | 2016 ई। → "2016" |
Y y | ठीक 2 अंकों वाला एक वर्ष। | 5 AD → "05" | 2016 ई। → "16" |
yyy | एक वर्ष जिसमें कम से कम 3 अंक हों। | 5 ईस्वी → "005" | 2016 ई। → "2016" |
yyyy | एक वर्ष जिसमें कम से कम 4 अंक हों। | 5 AD → "0005" | 2016 ई। → "2016" |
म | कम से कम 1 अंक वाला एक महीना। | जुलाई → "7" | "नवंबर" → "11" |
एम.एम. | कम से कम 2 अंकों वाला एक महीना। | जुलाई → "07" | "नवंबर" → "11" |
MMM | तीन अक्षर महीने का संक्षिप्त नाम। | जुलाई → "जूल" | "नवंबर" → "नवंबर" |
MMMM | महीने का पूरा नाम। | जुलाई → "जुलाई" | "नवंबर" → "नवंबर" |
MMMMM | एक अक्षर महीने का संक्षिप्त नाम (जनवरी, जून, जुलाई सभी में 'जे' होगा)। | जुलाई → "जे" | "नवंबर" → "एन" |
घ | कम से कम एक अंक वाला दिन। | 8 → "8" | 29 → "29" |
dd | कम से कम दो अंकों वाला दिन। | 8 → "08" | 29 → "29" |
"ई", "ईई", या "ईईई" | 3 अक्षर दिन नाम का संक्षिप्त नाम। | सोमवार → "सोम" | गुरुवार → "थू" |
EEEE | पूरे दिन का नाम। | सोमवार → "सोमवार" | गुरुवार → "गुरुवार" |
EEEEE | 1 अक्षर दिन के नाम का संक्षिप्त नाम। (थू और ट्यु 'T' होगा) | सोमवार → "एम" | गुरुवार → "टी" |
eeeeee | 2 अक्षर दिन नाम का संक्षिप्त नाम। | सोमवार → "मो" | गुरुवार → "गु" |
ए | दिन की अवधि (AM / PM)। | 10 बजे → "पीएम" | 2 AM → "AM" |
ज | कम से कम 1 अंक के साथ 1-12 आधारित घंटा। | 10 पीएम → "10" | 2 AM → "2" |
hh | कम से कम 2 अंकों के साथ 1-12 आधारित घंटा। | 10 पीएम → "10" | 2 AM → "02" |
एच | कम से कम 1 अंक के साथ एक 0-23 आधारित घंटा। | 10 पीएम → "14" | 2 AM → "2" |
एचएच | कम से कम 2 अंकों के साथ एक 0-23 आधारित घंटा। | 10 पीएम → "14" | 2 AM → "02" |
म | कम से कम 1 अंक वाला एक मिनट। | 7 → "7" | 29 → "29" |
मिमी | कम से कम 2 अंकों वाला एक मिनट। | 7 → "07" | 29 → "29" |
रों | कम से कम 1 अंक वाला दूसरा। | 7 → "7" | 29 → "29" |
एस एस | कम से कम 2 अंकों वाला दूसरा। | 7 → "07" | 29 → "29" |
ज़िस (z) के आधार पर अलग-अलग समय प्राप्त करने के लिए, मिलीसेकंड विवरण (S), आदि के साथ समय पाने के लिए और भी कई हैं।
वर्तमान तिथि प्राप्त करें
वर्तमान तिथि प्राप्त करना बहुत आसान है। आपको केवल एक पंक्ति में वर्तमान तिथि का NSDate ऑब्जेक्ट निम्नानुसार मिलेगा:
तीव्र
var date = NSDate()
स्विफ्ट 3
var date = Date()
उद्देश्य सी
NSDate *date = [NSDate date];
वर्तमान तिथि से NSDate ऑब्जेक्ट एन सेकंड प्राप्त करें
नई तारीख के लिए वर्तमान तिथि और समय से सेकंड की संख्या। वर्तमान तिथि से पहले दिनांक निर्दिष्ट करने के लिए एक नकारात्मक मान का उपयोग करें।
ऐसा करने के लिए हमारे पास dateWithTimerIntervalSinceNow(seconds: NSTimeInterval) -> NSDate
(स्विफ्ट) या + (NSDate*)dateWithTimeIntervalSinceNow:(NSTimeInterval)seconds
(ऑब्जेक्टिव-सी) नाम का एक तरीका है।
अब उदाहरण के लिए, यदि आपको वर्तमान तिथि से एक सप्ताह और वर्तमान तिथि से एक सप्ताह की आवश्यकता है, तो हम इसे कर सकते हैं।
तीव्र
let totalSecondsInWeek:NSTimeInterval = 7 * 24 * 60 * 60;
//Using negative value for previous date from today
let nextWeek = NSDate().dateWithTimerIntervalSinceNow(totalSecondsInWeek)
//Using positive value for future date from today
let lastWeek = NSDate().dateWithTimerIntervalSinceNow(-totalSecondsInWeek)
स्विफ्ट 3
let totalSecondsInWeek:TimeInterval = 7 * 24 * 60 * 60;
//Using positive value to add to the current date
let nextWeek = Date(timeIntervalSinceNow: totalSecondsInWeek)
//Using negative value to get date one week from current date
let lastWeek = Date(timeIntervalSinceNow: -totalSecondsInWeek)
उद्देश्य सी
NSTimeInterval totalSecondsInWeek = 7 * 24 * 60 * 60;
//Using negative value for previous date from today
NSDate *lastWeek = [NSDate dateWithTimeIntervalSinceNow:-totalSecondsInWeek];
//Using positive value for future date from today
NSDate *nextWeek = [NSDate dateWithTimeIntervalSinceNow:totalSecondsInWeek];
NSLog(@"Last Week: %@", lastWeek);
NSLog(@"Right Now: %@", now);
NSLog(@"Next Week: %@", nextWeek);
तारीख तुलना
तारीखों की तुलना करने के 4 तरीके हैं:
तीव्र
-
isEqualToDate(anotherDate: NSDate) -> Bool
-
earlierDate(anotherDate: NSDate) -> NSDate
-
laterDate(anotherDate: NSDate) -> NSDate
-
compare(anotherDate: NSDate) -> NSComparisonResult
उद्देश्य सी
-
- (BOOL)isEqualToDate:(NSDate *)anotherDate
-
- (NSDate *)earlierDate:(NSDate *)anotherDate
-
- (NSDate *)laterDate:(NSDate *)anotherDate
-
- (NSComparisonResult)compare:(NSDate *)anotherDate
मान लीजिए कि हमारे पास 2 तिथियाँ हैं:
तीव्र
let date1: NSDate = ... // initialized as July 7, 2016 00:00:00
let date2: NSDate = ... // initialized as July 2, 2016 00:00:00
उद्देश्य सी
NSDate *date1 = ... // initialized as July 7, 2016 00:00:00
NSDate *date2 = ... // initialized as July 2, 2016 00:00:00
फिर, उनकी तुलना करने के लिए, हम इस कोड की कोशिश करते हैं:
तीव्र
if date1.isEqualToDate(date2) {
// returns false, as both dates aren't equal
}
earlierDate: NSDate = date1.earlierDate(date2) // returns the earlier date of the two (date 2)
laterDate: NSDate = date1.laterDate(date2) // returns the later date of the two (date1)
result: NSComparisonResult = date1.compare(date2)
if result == .OrderedAscending {
// true if date1 is earlier than date2
} else if result == .OrderedSame {
// true if the dates are the same
} else if result == .OrderedDescending {
// true if date1 is later than date1
}
उद्देश्य सी
if ([date1 isEqualToDate:date2]) {
// returns false, as both date are not equal
}
NSDate *earlierDate = [date1 earlierDate:date2]; // returns date which comes earlier from both date, here it will return date2
NSDate *laterDate = [date1 laterDate:date2]; // returns date which comes later from both date, here it will return date1
NSComparisonResult result = [date1 compare:date2];
if (result == NSOrderedAscending) {
// fails
// comes here if date1 is earlier then date2, in our case it will not come here
} else if (result == NSOrderedSame){
// fails
// comes here if date1 is same as date2, in our case it will not come here
} else{ // NSOrderedDescending
// succeeds
// comes here if date1 is later than date2, in our case it will come here
}
यदि आप दिनांक और सेकंड, सप्ताह, महीने और वर्षों की तुलना करना चाहते हैं:
स्विफ्ट 3
let dateStringUTC = "2016-10-22 12:37:48 +0000"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss X"
let date = dateFormatter.date(from: dateStringUTC)!
let now = Date()
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.maximumUnitCount = 2
let string = formatter.string(from: date, to: Date())! + " " + NSLocalizedString("ago", comment: "added after elapsed time to say how long before")
या आप प्रत्येक घटक के लिए इसका उपयोग कर सकते हैं:
// get the current date and time
let currentDateTime = Date()
// get the user's calendar
let userCalendar = Calendar.current
// choose which date and time components are needed
let requestedComponents: Set<Calendar.Component> = [
.year,
.month,
.day,
.hour,
.minute,
.second
]
// get the components
let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime)
// now the components are available
dateTimeComponents.year
dateTimeComponents.month
dateTimeComponents.day
dateTimeComponents.hour
dateTimeComponents.minute
dateTimeComponents.second
यूनिक्स एपोच समय प्राप्त करें
यूनिक्स एपोच समय प्राप्त करने के लिए, निरंतर समय का उपयोग करें timeIntervalSince1970
:
तीव्र
let date = NSDate() // current date
let unixtime = date.timeIntervalSince1970
उद्देश्य सी
NSDate *date = [NSDate date]; // current date
int unixtime = [date timeIntervalSince1970];
NSDateFormatter
NSDate
ऑब्जेक्ट को स्ट्रिंग में NSDate
केवल 3 चरण है।
1. एक NSDateFormatter
ऑब्जेक्ट बनाएँ
तीव्र
let dateFormatter = NSDateFormatter()
स्विफ्ट 3
let dateFormatter = DateFormatter()
उद्देश्य सी
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
2. वह दिनांक प्रारूप सेट करें जिसमें आप अपनी स्ट्रिंग चाहते हैं
तीव्र
dateFormatter.dateFormat = "yyyy-MM-dd 'at' HH:mm"
उद्देश्य सी
dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
3. स्वरूपित स्ट्रिंग प्राप्त करें
तीव्र
let date = NSDate() // your NSDate object
let dateString = dateFormatter.stringFromDate(date)
स्विफ्ट 3
let date = Date() // your NSDate object
let dateString = dateFormatter.stringFromDate(date)
उद्देश्य सी
NSDate *date = [NSDate date]; // your NSDate object
NSString *dateString = [dateFormatter stringFromDate:date];
यह आउटपुट कुछ इस तरह देगा: 2001-01-02 at 13:00
ध्यान दें
NSDateFormatter
उदाहरण बनाना एक महंगा ऑपरेशन है, इसलिए इसे एक बार बनाने और जब संभव हो तब पुन: उपयोग करने की सिफारिश की जाती है।
स्ट्रिंग में दिनांक परिवर्तित करने के लिए उपयोगी विस्तार।
extension Date {
func toString() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMMM dd yyyy"
return dateFormatter.string(from: self)
}
}
तेजी से तारीख-गठन के लिए उपयोगी लिंक तेजी से हो रही मानव-पठनीय-तारीख-nsdateformatter ।
दिनांक स्वरूपों के निर्माण के लिए दिनांक प्रारूप पैटर्न देखें।
कन्वर्ट NSDate जो घंटे और मिनट (केवल) से एक पूर्ण NSDate में बना है
ऐसे कई मामले हैं, जब किसी ने केवल एक घंटे और मिनट प्रारूप से एक NSDate बनाया है, अर्थात: 08:12 जो एक सर्वर से स्ट्रिंग के रूप में लौटता है और आप केवल इन मानों द्वारा एक NSDate उदाहरण आरंभ करते हैं।
इस स्थिति के लिए नकारात्मक पक्ष यह है कि आपका NSDate लगभग पूरी तरह से "नग्न" है और आपको क्या करने की आवश्यकता है: अन्य NSDate प्रकारों के साथ "खेलने" के लिए इस ऑब्जेक्ट को बनाने के लिए दिन, महीना, वर्ष, दूसरा और समय क्षेत्र।
उदाहरण के लिए मान लें कि घंटेअमिनट्यूड NSDate प्रकार है जो घंटे और मिनट प्रारूप से बना है:
उद्देश्य सी
NSDateComponents *hourAndMinuteComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute
fromDate:hourAndMinute];
NSDateComponents *componentsOfDate = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
fromDate:[NSDate date]];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay: componentsOfDate.day];
[components setMonth: componentsOfDate.month];
[components setYear: componentsOfDate.year];
[components setHour: [hourAndMinuteComponents hour]];
[components setMinute: [hourAndMinuteComponents minute]];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone defaultTimeZone]];
NSDate *yourFullNSDateObject = [calendar dateFromComponents:components];
अब आपकी वस्तु "नग्न" होने के कुल विपरीत है।
यूटीसी टाइम एनएसजेट से टाइमजोन के साथ भरपाई करता है
यहां यह वांछित समय क्षेत्र में वर्तमान डेटा से UTC
समय ऑफसेट की गणना करेगा।
+(NSTimeInterval)getUTCOffSetIntervalWithCurrentTimeZone:(NSTimeZone *)current forDate:(NSDate *)date {
NSTimeZone *utcTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
NSInteger currentGMTOffset = [current secondsFromGMTForDate:date];
NSInteger gmtOffset = [utcTimeZone secondsFromGMTForDate:date];
NSTimeInterval gmtInterval = currentGMTOffset - gmtOffset;
return gmtInterval;
}
समय चक्र प्रकार (12-घंटे या 24-घंटे) प्राप्त करें
जाँच कर रहा है कि वर्तमान तिथि में AM या PM के लिए प्रतीक है या नहीं
उद्देश्य सी
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);
NSDateFormatter
से समय चक्र प्रकार का अनुरोध करना
उद्देश्य सी
NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
NSRange containsA = [formatStringForHours rangeOfString:@"a"];
BOOL is24h = containsA.location == NSNotFound;
यह एक विशेष दिनांक टेम्पलेट स्ट्रिंग का उपयोग करता है जिसे "j" कहा जाता है जो ICU Spec के अनुसार है ...
[...] लोकेल (घंटे, एच, के, या के) के लिए पसंदीदा घंटे के प्रारूप का अनुरोध करता है, जैसा कि पूरक डेटा में घंटे तत्व की पसंदीदा विशेषता द्वारा निर्धारित किया गया है। [...] ध्यान दें कि एक एपीआई में पास किए गए कंकाल में 'जे' का उपयोग एक कंकाल के लिए स्थानीय लोगों के पसंदीदा समय चक्र प्रकार (12-घंटे या 24-घंटे) का अनुरोध करने का एकमात्र तरीका है।
वह अंतिम वाक्य महत्वपूर्ण है। यह "एक कंकाल का अनुरोध करने का एकमात्र तरीका है, जो स्थानीय लोगों के पसंदीदा समय चक्र प्रकार का अनुरोध करता है"। चूंकि NSDateFormatter
और NSCalendar
को ICU लाइब्रेरी में बनाया गया है, वही यहाँ सही है।
संदर्भ
दूसरा विकल्प इस उत्तर से लिया गया था।
JSON तिथि प्रारूप से NSDate प्राप्त करें "/ दिनांक (1268123281843) /"
Json.NET से पहले 4.5 तिथियों को Microsoft प्रारूप का उपयोग करते हुए लिखा गया था: "/ तिथि (1198908717056) /"। यदि आपका सर्वर इस प्रारूप में तारीख भेजता है तो आप इसे NSDate में अनुक्रमित करने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं:
उद्देश्य सी
(NSDate*) getDateFromJSON:(NSString *)dateString
{
// Expect date in this format "/Date(1268123281843)/"
int startPos = [dateString rangeOfString:@"("].location+1;
int endPos = [dateString rangeOfString:@")"].location;
NSRange range = NSMakeRange(startPos,endPos-startPos);
unsigned long long milliseconds = [[dateString substringWithRange:range] longLongValue];
NSLog(@"%llu",milliseconds);
NSTimeInterval interval = milliseconds/1000;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval];
// add code for date formatter if need NSDate in specific format.
return date;
}
NSDate से ऐतिहासिक समय प्राप्त करें (उदाहरण के लिए: 5s पहले, 2 वर्ष पहले, 3 दिनों पहले)
इसका उपयोग विभिन्न चैट एप्लिकेशन, आरएसएस फ़ीड और सामाजिक ऐप में किया जा सकता है, जहां आपको टाइमस्टैम्प के साथ नवीनतम फ़ीड्स की आवश्यकता होती है:
उद्देश्य सी
- (NSString *)getHistoricTimeText:(NSDate *)since
{
NSString *str;
NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:since];
if(interval < 60)
str = [NSString stringWithFormat:@"%is ago",(int)interval];
else if(interval < 3600)
{
int minutes = interval/60;
str = [NSString stringWithFormat:@"%im ago",minutes];
}
else if(interval < 86400)
{
int hours = interval/3600;
str = [NSString stringWithFormat:@"%ih ago",hours];
}
else
{
NSDateFormatter *dateFormater=[[NSDateFormatter alloc]init];
[dateFormater setLocale:[NSLocale currentLocale]];
NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:@"MMM d, YYYY" options:0 locale:[NSLocale currentLocale]];
[dateFormater setDateFormat:dateFormat];
str = [dateFormater stringFromDate:since];
}
return str;
}