Format tanggal dan waktu dari pengaturan iPhone dan offset GMT

Saya memiliki string dengan format tanggal waktu misalnya: 2013-05-28 10:56:31

Bagaimana cara memformat string ini ke format default iPhone? (dalam pengaturan iPhone)

Dan cara mengatur tanggal waktu dalam GMT plus offset pergeseran waktu (diatur di iphone juga). misalnya GMT+1

Apakah ini mungkin?


person Miras    schedule 28.05.2013    source sumber


Jawaban (2)


Anda dapat menggunakan NSDateFormatter untuk mencapai ini.

NSString *dateString = @"2013-05-28 10:56:31";

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

//Special Locale for fixed dateStrings
NSLocale *locale = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"];
[formatter setLocale:locale];

//Assuming the dateString is in GMT+00:00
//formatter by default would be set to local timezone 
NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
[formatter setTimeZone:timeZone];

[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate *date =[formatter dateFromString:dateString];

//After forming the date set local time zone to formatter    
NSTimeZone *localTimeZone = [NSTimeZone localTimeZone];
[formatter setTimeZone:localTimeZone];

NSString *newTimeZoneDateString = [formatter stringFromDate:date];
NSLog(@"%@",newTimeZoneDateString);

Beberapa petunjuk untuk menggunakan dateFormatter.

  1. Jika string tidak berisi informasi apa pun tentang zona waktu dan tidak berada dalam zona waktu yang sama seperti di perangkat, selalu setel zona waktu ke dateFormatter.
  2. Untuk format tetap dateStrings selalu gunakan en_US_POSIX lokal
  3. NSDate saat login konsol selalu ditampilkan pada GMT+00:00. NSDate tidak memiliki zona waktu, hanya berbeda jika direpresentasikan dalam zona waktu berbeda.
  4. Ubah tanggal yang terbentuk menjadi zona waktu mana pun, dengan mengatur zona waktu baru ke formatter. Pemformat tidak pernah mengubah tanggal, ia hanya menghitung ulang bagaimana tanggal tersebut akan direpresentasikan dalam zona waktu baru ini.
person Anupdas    schedule 28.05.2013
comment
Maaf saya tidak mengerti, apa yang harus saya lakukan setelahnya? ini yang Anda tulis, ubah string saya menjadi tanggal dalam format yyyy-MM-dd HH:mm:ss? tapi kenapa en_US_POSIX? bagaimana jika seseorang tidak memiliki lokal ini? dan bagaimana dengan zona waktu itu? - person Miras; 28.05.2013
comment
@Miras Disarankan untuk menggunakan lokal khusus ini untuk string format tanggal tetap. Baca di sini NSDateFormatter. Saya akan memperbarui jawaban saya untuk memasukkan konversi zona waktu. - person Anupdas; 28.05.2013
comment
oke aku akan menontonnya. Untuk kali ini terima kasih dan saya tulis di sini bagaimana ini membantu saya. - person Miras; 28.05.2013
comment
Saya mencobanya, itu bagus, tetapi tetap tidak sesuai keinginan saya. Saya memerlukan waktu ini dengan format perangkat, format pendek sistem, atau sesuatu seperti ini. Dan zona waktu yang Anda tulis adalah untuk zona waktu UTC, tetapi saya memerlukan zona waktu sistem. misalnya jika saya mencetak hasil NSTimeZone *timeZone = [NSTimeZone systemTimeZone]; Saya mendapatkan offset Eropa/Praha (GMT+02:00) 7200 (Siang Hari) dan saya ingin menambahkan 2 jam ini ke format waktu mi. - person Miras; 28.05.2013
comment
@Miras Secara default dateFormatter akan memiliki localTimeZone. Jika Anda mengetahui zona waktu dateString, atur TimeZone tersebut ke formatter saat Anda mencoba membentuk tanggal. Setelah tanggal terbentuk, Anda dapat mengatur Zona waktu lain untuk memformat dan mengonversi tanggal yang terbentuk menjadi string pilihan Anda. - person Anupdas; 28.05.2013
comment
wau aku mulai memahaminya. Tetapi jika saya mencoba kode ini, dan mengubah zona waktu saya di iPhone. misalnya ke london waktu GMT+1. Dan jika saya mencetak waktu saya, saya melihat ini 28-05-2013 09:56:31. Saya pikir ini seharusnya 28-05-2013 11:56:31, bukan begitu? Karena 28-05-2013 10:56:31 seharusnya GMT+0 - person Miras; 29.05.2013
comment
@Miras Saya telah mengedit jawaban saya dan menambahkan beberapa petunjuk. Silakan pelajari dan temukan sendiri jawabannya :) - person Anupdas; 29.05.2013
comment
Terima kasih, saya rasa saya mengerti apa yang Anda tulis, tetapi masih belum tahu cara membuatnya. Saya rasa saya harus membaca manual NSDateFormatter dan NSTimeZone dengan benar - person Miras; 29.05.2013
comment
@Miras Saya telah mengubah kodenya sekali lagi. Lihat apakah ini yang Anda harapkan. - person Anupdas; 29.05.2013
comment
ya ya ya, inilah yang saya inginkan. Terima kasih banyak. Terakhir pikirkan yang saya perlukan adalah memformat tanggal itu untuk memformat apa yang saya butuhkan, seseorang memiliki format 12 jam dan seseorang 24 jam dll. Tapi saya akan membaca manual NSDateFormatter itu, dan kemudian saya akan menjadi lebih pintar. Terima kasih lagi - person Miras; 29.05.2013

Lihat dokumentasi tentang NSDateFormatter, khususnya dateFromString, yang mengembalikan "Representasi tanggal dari string yang diinterpretasikan menggunakan pengaturan penerima saat ini."

person isaach1000    schedule 28.05.2013