Làm cách nào để tìm bù đắp múi giờ hiện tại trên thiết bị sau HOURS?iPhone: Tìm bù đắp múi giờ hiện tại trong HOURS
Trả lời
NSDate *sourceDate = [NSDate dateWithTimeIntervalSinceNow:3600 * 24 * 60];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
float timeZoneOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]/3600.0;
NSLog(@"sourceDate=%@ timeZoneOffset=%d", sourceDate, timeZoneOffset);
Có một đối tượng NSTimeZone rất đẹp mà sẽ cung cấp cho bạn các múi giờ bù đắp từ giờ chỉ trong vài giây:
float timezoneoffset = ([[NSTimeZone systemTimeZone] secondsFromGMT]/3600.0);
Để biết thêm xem bài đăng blog
http://blog.indieiphonedev.com/2011/01/09/getting-the-timezone-on-the-device/
Hãy nhớ rằng bù đắp không nhất thiết phải là một số nguyên - số các quốc gia có khoảng thời gian nghỉ một nửa (hoặc quý) (tôi thấy bài đăng đó đề cập đến nó, chỉ trong trường hợp mọi người không đọc được). –
Chỉ muốn thêm rằng mã này tránh một số cạm bẫy tiềm năng của câu trả lời được đánh dấu là chính xác. –
Liên kết tới bài đăng trên blog trong câu trả lời đã chết. – Pang
Đừng sử dụng một int !!! Tôi đã sao chép mã này và hiện có lỗi trong ứng dụng của mình. Một số múi giờ là 0,5 giờ
sử dụng này:
float offset = [timezone secondsFromGMTForDate:self.date]/3600.0;
và đừng quên các .0 đằng sau 3600
Đối với bất cứ ai tìm kiếm các múi giờ hiện tại bù đắp như là một chuỗi, hãy thử:
NSDateFormatter *localTimeZoneFormatter = [NSDateFormatter new];
localTimeZoneFormatter.timeZone = [NSTimeZone localTimeZone];
localTimeZoneFormatter.dateFormat = @"Z";
NSString *localTimeZoneOffset = [localTimeZoneFormatter stringFromDate:[NSDate date]];
Trong múi giờ của tôi, localTimeZoneOffset
chứa -0700
Cảm ơn. Đã lưu giờ của tôi. –
-(void)getDeviceUTCOffset{
NSDate *date = [NSDate date];
NSTimeZone* deviceTimeZone_ = [NSTimeZone systemTimeZone];
float offset = [deviceTimeZone_ secondsFromGMTForDate:date]/3600.0;
}
Để kiểm tra mã - thử nghiệm trên một thiết bị
thay đổi thiết bị múi giờ trong
Settings > General > Date Time
Turn off SET AUTOMATICALLY
Then tap TimeZone and choose major cities east/west of you
Run code and check float offset
Hãy so sánh giá trị cho các thành phố trên trang web này
ví dụ heres Helsinki
Chuẩn múi giờ: UTC/GMT +2 giờ - như của tháng mười một
http://www.timeanddate.com/worldclock/city.html?n=101
tra chống lại các quốc gia có giờ mùa hè Anh hoặc tương đương của họ.
Sử dụng NSTimeZone của localTimeZon e
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSInteger seconds = [timeZone secondsFromGMT];
NSLog(@"TZ : %@ : Seconds %ld",[timeZone abbreviation],(long)seconds);
int h = (int)seconds/3600;
int m = (int)seconds/60 % 60;
NSString *strGMT = @"";
if (h>=0)
strGMT = [NSString stringWithFormat:@"+%02d:%02d", h, m];
else
strGMT = [NSString stringWithFormat:@"%03d:%02d", h, m];
NSLog(@"GMT -/+ HH:mm: %@",strGMT);
Đoạn mã trên không tạo ra các giá trị chính xác cho các giây âm tínhTừGMTG và các số không khác. Tôi sẽ đề nghị thay thế điều kiện bằng 'if (0 <= giây)' và câu lệnh 'else' bằng' strGMT = [NSString stringWithFormat: @ "-% 02d:% 02d", -h, -m]; ' –
Dưới đây là một cách dễ dàng để làm điều này trong Swift 3:
let offsetInHours = Double(TimeZone.current.secondsFromGMT())/3600.0
- 1. Xác định bù đắp múi giờ trong T-SQL
- 2. Lấy đúng múi giờ bù đắp bằng Python sử dụng múi giờ địa phương
- 3. Làm thế nào để lấy bù đắp múi giờ từ GMT + 0 trong php?
- 4. Trong tính toán bù trừ MySQL cho một múi giờ
- 5. Làm thế nào để tìm (trong javascript) hiện tại "di chuyển" bù đắp trong điện thoại di động safari/iphone
- 6. iOS - Làm thế nào để nhận được bù đắp thô cho múi giờ?
- 7. Bù giờ múi giờ địa phương trong PostgreSQL
- 8. Nhận múi giờ của khách hàng (không phải số tiền bù giờ GMT) trong JS
- 9. Nguyên nhân: "Thông báo: Không bù đắp chuỗi bù đắp" xuất hiện?
- 10. Twitter thay đổi khởi động bù đắp bù đắp
- 11. PYTZ 'Mỹ/Edmonton' bù đắp sai
- 12. cách tìm thời gian tại múi giờ cụ thể từ bất cứ nơi nào
- 13. Thêm bù đắp vào IntPtr
- 14. Tôi làm cách nào để lấy giá trị UTC hiện tại (múi giờ)?
- 15. Nhận chênh lệch múi giờ giữa hai múi giờ trong một thời hạn nhất định
- 16. Số trang và bù đắp
- 17. MKPinAnnotationView bù đắp hình ảnh?
- 18. Mongo ObjectId: "Không thể so sánh bù đắp-ngây thơ và bù đắp-aware datetimes" ngay cả với pytz
- 19. Xử lý múi giờ trong bộ nhớ?
- 20. UIScrollView thay đổi nội dung bù đắp trên hiện tạiModalViewController
- 21. Bù đắp hình dạng trong một ShapeDrawable
- 22. Lấy múi giờ hiện tại trong ứng dụng android
- 23. MousePressEvent, vị trí bù đắp trong QGraphicsView
- 24. Làm thế nào để có được tính theo giờ UTC bù đắp trong javascript (analog của TimeZoneInfo.GetUtcOffset trong C#)
- 25. Thời gian chạy bằng múi giờ
- 26. Điều chỉnh múi giờ trong PHP với DateTime/DateTimeZone
- 27. Một truy vấn bù đắp là gì?
- 28. Tính toán Bọ Rác và Bù Đắp
- 29. Ruby - mỗi bù đắp bắt đầu
- 30. không xác định bù đắp PHP lỗi
Có hai vấn đề tiềm ẩn với mã này: (1) nó thực sự nên sử dụng "localTimeZone" thay vì "systemTimeZone" (thường kết thúc bằng nhau). (2) sourceDate phải là [NSDate date], tôi đã gặp phải vấn đề trong đó timeZoneOffset bị sai bởi một giờ khi sử dụng ngày off-by-ngày đã cho. Bạn có thể giải thích tại sao bạn sử dụng ngày nguồn khác nhau theo ngày không? –