簡體   English   中英

本地化NSDate並轉換NSDate的時區

[英]Localize the NSDate and Convert timezone of NSDate

在我的iPhone / iPad應用程序中,我正在顯示UIDatePicker。 它將以這種格式顯示時間11:00 AM。 當用戶單擊時間行時,我們將展開時間行以顯示此datePicker行。 我在字符串“ starts”中有一個時間戳:“ 11:00”,// ISO-8601格式的一天中的時間,我需要在拾紙輪上將其顯示為打開時的選定時間。 為此,首先我使用https://stackoverflow.com/a/9040554/4082792來獲取12點的日期。 然后,我將給定時間(11:00)轉換為秒數,並將其添加到午夜時間以獲取當前時間。 該時間位於本地時區(因為我在使用NSDateFormatter時指定了時區)。 當我嘗試使用該日期將setDate設置為UIDatePicker時,即使NSDate變量中的時間正確,它也會給我不正確的時間。 對於11:00 AM,當地時間是4:30,所以給我6:40。 因此,我有兩個問題:1)為什么時間錯了? 2)如何將NSDate從一個時區轉換為另一個時區,我需要以本地時間格式顯示它。

片段:

NSString *strDate = @"11:00";
        NSDate *date = [NSDate date];
        NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
        NSUInteger preservedComponents = (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit);
        date = [calendar dateFromComponents:[calendar components:preservedComponents fromDate:date]];


        ///Start time
        NSString *startTime = @"11:00";
        NSArray *startTimeSeparatedByColon = [startTime componentsSeparatedByString:@":"]; /// From 22:10 to [22, 10];
        NSInteger hourPartOfStart = startTimeSeparatedByColon[0] ? [startTimeSeparatedByColon[0] integerValue] : 0;
        NSInteger minutePartOfStart = startTimeSeparatedByColon[1] ? [startTimeSeparatedByColon[1] integerValue] : 0;
        NSTimeInterval totalTime = (hourPartOfStart*60*60+minutePartOfStart*60);

        NSDate *finalDate =   [NSDate dateWithTimeInterval:totalTime sinceDate:date];

        NSDate *dt = [NSDate dateWithTimeInterval:[NSTimeZone localTimeZone].secondsFromGMT sinceDate:finalDate];
        self.datePicker.date = dt;

默認情況下,iOS會將日期轉換為設備的時區。 但是,如果要將日期轉換為另一個時區,請使用以下代碼:

NSTimeZone *currentDateTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"EST"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:currentDateTimeZone];

您可以從此dateFormatter對象獲取“ EST”時區中的日期。

轉換“ EDT”時

 NSString *format = @"EEEE dd-MMMM-yyyy HH:mm:ss z";
 NSDateFormatter *date_EDTDateFormate = [[NSDateFormatter alloc] init];
 date_EDTDateFormate setDateFormat:format];
 date_EDTDateFormate setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EDT"]];
 NSString *stringEDT = [dateFormatter_EDT stringFromDate:date_System];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM