আমি কীভাবে NSDate
কোনও ইউটিসিকে স্থানীয় সময় অঞ্চল এনএসডিটকে উদ্দেশ্য সি বা / এবং সুইফটে রূপান্তর করব ?
আমি কীভাবে NSDate
কোনও ইউটিসিকে স্থানীয় সময় অঞ্চল এনএসডিটকে উদ্দেশ্য সি বা / এবং সুইফটে রূপান্তর করব ?
উত্তর:
NSTimeInterval seconds; // assume this exists
NSDate* ts_utc = [NSDate dateWithTimeIntervalSince1970:seconds];
NSDateFormatter* df_utc = [[[NSDateFormatter alloc] init] autorelease];
[df_utc setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[df_utc setDateFormat:@"yyyy.MM.dd G 'at' HH:mm:ss zzz"];
NSDateFormatter* df_local = [[[NSDateFormatter alloc] init] autorelease];
[df_local setTimeZone:[NSTimeZone timeZoneWithName:@"EST"]];
[df_local setDateFormat:@"yyyy.MM.dd G 'at' HH:mm:ss zzz"];
NSString* ts_utc_string = [df_utc stringFromDate:ts_utc];
NSString* ts_local_string = [df_local stringFromDate:ts_utc];
// you can also use NSDateFormatter dateFromString to go the opposite way
বিন্যাস স্ট্রিং পরামিতিগুলির সারণী:
https://waracle.com/iphone-nsdateformatter-date-formatting-table/
পারফরম্যান্স যদি অগ্রাধিকার হয় তবে আপনি ব্যবহারটি বিবেচনা করতে পারেন strftime
NSDate
সারমর্মটি হ'ল বস্তুর কোনও রূপান্তর প্রয়োজন নেই, যা সঠিক। তারিখটি ফর্ম্যাট করার সময় সময় অঞ্চলে রূপান্তর ঘটে, এটি তৈরি হওয়ার সময় নয়, কারণ তারিখের সময় অঞ্চল থাকে না।
NSCalendarDate
হয়েছে।
সম্পাদনা করুন যখন আমি এটি লিখেছিলাম তখন আমি জানতাম না যে আমার একটি ডেটফর্ম্টার ব্যবহার করা উচিত যা সম্ভবত আরও ভাল পদ্ধতির, সুতরাং এর উত্তরটিও পরীক্ষা করে দেখুন slf
।
আমার কাছে একটি ওয়েবসার্ভিস রয়েছে যা ইউটিসিতে তারিখগুলি ফেরত দেয়। আমি toLocalTime
এটি স্থানীয় সময়ে toGlobalTime
রূপান্তর করতে এবং প্রয়োজনে ফিরে রূপান্তর করতে ব্যবহার করি ।
এখান থেকেই আমার উত্তর পেয়েছি:
https://agilewarrior.wordpress.com/2012/06/27/how-to-convert-nsdate-to-different-time-zones/
@implementation NSDate(Utils)
-(NSDate *) toLocalTime
{
NSTimeZone *tz = [NSTimeZone defaultTimeZone];
NSInteger seconds = [tz secondsFromGMTForDate: self];
return [NSDate dateWithTimeInterval: seconds sinceDate: self];
}
-(NSDate *) toGlobalTime
{
NSTimeZone *tz = [NSTimeZone defaultTimeZone];
NSInteger seconds = -[tz secondsFromGMTForDate: self];
return [NSDate dateWithTimeInterval: seconds sinceDate: self];
}
@end
আমি খুঁজে পাওয়া সবচেয়ে সহজ পদ্ধতিটি হ'ল:
NSDate *someDateInUTC = …;
NSTimeInterval timeZoneSeconds = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate *dateInLocalTimezone = [someDateInUTC dateByAddingTimeInterval:timeZoneSeconds];
secondsFromGMTForDate
যদি আপনি দিবালোক সংরক্ষণের জন্য অ্যাকাউন্ট করতে চান তবে ব্যবহার করা উচিত। অ্যাপল ডক্স
সুইফট 3+ : ইউটিসি থেকে স্থানীয় এবং স্থানীয় থেকে ইউটিসি
extension Date {
// Convert UTC (or GMT) to local time
func toLocalTime() -> Date {
let timezone = TimeZone.current
let seconds = TimeInterval(timezone.secondsFromGMT(for: self))
return Date(timeInterval: seconds, since: self)
}
// Convert local time to UTC (or GMT)
func toGlobalTime() -> Date {
let timezone = TimeZone.current
let seconds = -TimeInterval(timezone.secondsFromGMT(for: self))
return Date(timeInterval: seconds, since: self)
}
}
আপনি যদি স্থানীয় তারিখ এবং সময় চান। এই কোডটি ব্যবহার করে দেখুন: -
NSString *localDate = [NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterMediumStyle];
[NSDate date]
করা হবে [NSDate dateWithNaturalLanguageString:sMyDateString]
।
আপনার ইউটিসি তারিখটিকে স্থানীয় তারিখে রূপান্তর করুন
-(NSString *)getLocalDateTimeFromUTC:(NSString *)strDate
{
NSDateFormatter *dtFormat = [[NSDateFormatter alloc] init];
[dtFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dtFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSDate *aDate = [dtFormat dateFromString:strDate];
[dtFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dtFormat setTimeZone:[NSTimeZone systemTimeZone]];
return [dtFormat stringFromDate:aDate];
}
এই মত ব্যবহার করুন
NSString *localDate = [self getLocalDateTimeFromUTC:@"yourUTCDate"];
এখানে ইনপুটটি একটি স্ট্রিং কার্টিউটটাইম (08/30/2012 11:11 ফর্ম্যাটে) GMT এ ইনপুট সময়কে সিস্টেম সেট জোনের সময়ে রূপান্তর করে
//UTC time
NSDateFormatter *utcDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[utcDateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"];
[utcDateFormatter setTimeZone :[NSTimeZone timeZoneForSecondsFromGMT: 0]];
// utc format
NSDate *dateInUTC = [utcDateFormatter dateFromString: currentUTCTime];
// offset second
NSInteger seconds = [[NSTimeZone systemTimeZone] secondsFromGMT];
// format it and send
NSDateFormatter *localDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[localDateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"];
[localDateFormatter setTimeZone :[NSTimeZone timeZoneForSecondsFromGMT: seconds]];
// formatted string
NSString *localDate = [localDateFormatter stringFromDate: dateInUTC];
return localDate;
//This is basic way to get time of any GMT time.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm a"]; // 09:30 AM
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:1]]; // For GMT+1
NSString *time = [formatter stringFromDate:[NSDate date]]; // Current time
তারিখ রূপান্তর উপযুক্ত স্থানীয় সঙ্গে এক ইউটিসি ক্যালেন্ডার থেকে NSTimeZone ।
তারিখের সময়টিকে আমাদের লোকালটাইমজোনতে রূপান্তর করতে আমি এই পদ্ধতিটি লিখি
এখানে (এনএসএসআরটিং *) টাইমজোন প্যারামিটার একটি সার্ভার টাইমজোন
-(NSString *)convertTimeIntoLocal:(NSString *)defaultTime :(NSString *)TimeZone
{
NSDateFormatter *serverFormatter = [[NSDateFormatter alloc] init];
[serverFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:TimeZone]];
[serverFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *theDate = [serverFormatter dateFromString:defaultTime];
NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init];
[userFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[userFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *dateConverted = [userFormatter stringFromDate:theDate];
return dateConverted;
}
যেহেতু কেউ ব্যবহার করছে বলে মনে হচ্ছে না NSDateComponents
, তাই আমি ভেবেছিলাম যে আমি এটিতে একটি পিচ করব ... এই সংস্করণে কোনও NSDateFormatter
ব্যবহার করা হয় না, সুতরাং স্ট্রিংকে পার্সিং করা NSDate
হয় না এবং GMT (UTC) এর বাইরে সময়ের প্রতিনিধিত্ব করতে ব্যবহৃত হয় না। আসলটি NSDate
ভেরিয়েবলের মধ্যে রয়েছে i_date
।
NSCalendar *anotherCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:i_anotherCalendar];
anotherCalendar.timeZone = [NSTimeZone timeZoneWithName:i_anotherTimeZone];
NSDateComponents *anotherComponents = [anotherCalendar components:(NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitNanosecond) fromDate:i_date];
// The following is just for checking
anotherComponents.calendar = anotherCalendar; // anotherComponents.date is nil without this
NSDate *anotherDate = anotherComponents.date;
i_anotherCalendar
হতে পারে NSCalendarIdentifierGregorian
বা অন্য কোনও ক্যালেন্ডার হতে পারে । NSString
জন্য অনুমোদিত i_anotherTimeZone
সঙ্গে অর্জিত হতে পারে [NSTimeZone knownTimeZoneNames]
, কিন্তু anotherCalendar.timeZone
হতে পারে [NSTimeZone defaultTimeZone]
বা [NSTimeZone localTimeZone]
বা [NSTimeZone systemTimeZone]
পুরাপুরি।
এটি আসলে anotherComponents
নতুন সময় অঞ্চলে সময় ধারণ করে। আপনি দেখতে পাবেন এর anotherDate
সমান i_date
, কারণ এটি GMT (UTC) এ সময় রাখে।
আপনি এটি চেষ্টা করতে পারেন:
NSDate *currentDate = [[NSDate alloc] init];
NSTimeZone *timeZone = [NSTimeZone defaultTimeZone];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeZone:timeZone];
[dateFormatter setDateFormat:@"ZZZ"];
NSString *localDateString = [dateFormatter stringFromDate:currentDate];
NSMutableString *mu = [NSMutableString stringWithString:localDateString];
[mu insertString:@":" atIndex:3];
NSString *strTimeZone = [NSString stringWithFormat:@"(GMT%@)%@",mu,timeZone.name];
NSLog(@"%@",strTimeZone);
ইউটিসি সময়কে বর্তমান সময়ের জোনে রূপান্তর করুন।
কল ফাংশন
NSLocale *locale = [NSLocale autoupdatingCurrentLocale];
NSString *myLanguageCode = [locale objectForKey: NSLocaleLanguageCode];
NSString *myCountryCode = [locale objectForKey: NSLocaleCountryCode];
NSString *rfc3339DateTimeString = @"2015-02-15 00:00:00"];
NSDate *myDateTime = (NSDate*)[_myCommonFunctions _ConvertUTCTimeToLocalTimeWithFormat:rfc3339DateTimeString LanguageCode:myLanguageCode CountryCode:myCountryCode Formated:NO];
ক্রিয়া
-NSObject*)_ConvertUTCTimeToLocalTimeWithFormat:rfc3339DateTimeString LanguageCode:(NSString *)lgc CountryCode:(NSString *)ctc Formated:(BOOL) formated
{
NSDateFormatter *sUserVisibleDateFormatter = nil;
NSDateFormatter *sRFC3339DateFormatter = nil;
NSTimeZone *timeZone = [NSTimeZone defaultTimeZone];
if (sRFC3339DateFormatter == nil)
{
sRFC3339DateFormatter = [[NSDateFormatter alloc] init];
NSLocale *myPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:[NSString stringWithFormat:@"%@", timeZone]];
[sRFC3339DateFormatter setLocale:myPOSIXLocale];
[sRFC3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
[sRFC3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
}
// Convert the RFC 3339 date time string to an NSDate.
NSDate *date = [sRFC3339DateFormatter dateFromString:rfc3339DateTimeString];
if (formated == YES)
{
NSString *userVisibleDateTimeString;
if (date != nil)
{
if (sUserVisibleDateFormatter == nil)
{
sUserVisibleDateFormatter = [[NSDateFormatter alloc] init];
[sUserVisibleDateFormatter setDateStyle:NSDateFormatterMediumStyle];
[sUserVisibleDateFormatter setTimeStyle:NSDateFormatterShortStyle];
}
// Convert the date object to a user-visible date string.
userVisibleDateTimeString = [sUserVisibleDateFormatter stringFromDate:date];
return (NSObject*)userVisibleDateTimeString;
}
}
return (NSObject*)date;
}