2009-07-04 57 views
20

Tôi có một thời gian trong múi giờ EST, nó được thực hiện bằng cách sử dụng hàm NOW() trên máy chủ mysql. Vì máy chủ của tôi nằm ở EST, thời gian được lưu trữ là EST. Khi tôi lấy nó từ ứng dụng của tôi trên iPhone, tôi cần hiển thị nó trong múi giờ chính xác của người dùng. Làm thế nào để làm điều đó?Làm thế nào để chuyển đổi thời gian thành múi giờ của thiết bị iPhone?

Trả lời

3

Tôi nghĩ điều đó phụ thuộc vào ý bạn của EST - nếu bạn ngụ ý Bờ Đông Hoa Kỳ, sau đó nói chung, đó là 5 giờ sau UTC (nhưng không tính toán tiết kiệm ánh sáng ban ngày), sẽ cung cấp cho bạn 04:00 EST. Cố gắng tránh sử dụng chữ viết tắt nếu có thể, vì chúng mơ hồ, ví dụ: EST là viết tắt của cả Mỹ/Detroit và Úc/Sydney. Sử dụng NSTimeZone initWithName sẽ cho kết quả chính xác hơn.

Chronos Time Zone Repository cung cấp cơ sở dữ liệu múi giờ XML có thể đọc được thực sự giúp hiểu được múi giờ hoạt động như thế nào (tất cả đều khá lộn xộn và có thể thay đổi).

3

// Bạn có thể sử dụng chức năng dưới đây để chuyển đổi ngày đến một múi giờ bạn muốn

+ (NSDate *) convertDate:(NSDate *) date toTimeZone:(NSString *) timeZoneAbbreviation { 

    NSTimeZone *systemZone = [NSTimeZone systemTimeZone]; 
    NSTimeZone *zoneUTC  = [NSTimeZone timeZoneWithAbbreviation:timeZoneAbbreviation]; 
    NSTimeInterval s  = [zoneUTC secondsFromGMT]; 

    NSTimeZone *myZone  = [NSTimeZone timeZoneWithAbbreviation:[systemZone abbreviationForDate:date]]; 
    NSTimeInterval p  = [myZone secondsFromGMT]; 

    NSTimeInterval i = s-p; 
    NSDate *d = [NSDate dateWithTimeInterval:i sinceDate:date]; 

    return d; 

} 


//Test case **note** cgUtil is the class this method is written thus change it accordingly 

__block NSDate *now = [NSDate date]; 
NSLog(@"Current time:%@", now); 
[[[NSTimeZone abbreviationDictionary] allKeys] enumerateObjectsUsingBlock:^(NSString * abb, NSUInteger idx, BOOL *stop) { 
    NSLog(@"Time zone abb:%@:Time:%@",abb,[cgUtil convertDate:now toTimeZone:abb]); 
}]; 
Các vấn đề liên quan