Uygulamada tarih/saat işlemleri.
Hem GitHub organizasyonunda paylaştığım repository lere hem de türkçe kaynağa destek olması amacıyla Gist file kullanarak burada da bazı açıklamalarda bulunmak istedim.
— hosted with ❤️ by GitHub —
Neyse konuya başlangıcı alalım. Şimdi öncelikle tarih ve saati uygulamada nasıl almamız gerekli ve Swift 3 de beklenmeyen Date() formatı ile karşılaşırsanız ne yapmalısınız?
Tarih-saat olarak eğer global bir uygulama olacaksa UTC (Universal Time Zone) kullanmanız kesinlikle şart. Her durumda bunu kullanmanız benim tercihim olacaktır. TR’de Eş Güdümlü Evrensel Zaman denmiş. “Evrensel Zaman Dilimi” demek yeterli gibi.
Varsayalım saat Türkiye’de 12:30 (+03:00) ancak UTC olarak 09:30 (+00:00) olacak, zaman dilimleri önemli. Başka bir ülke-zaman diliminden uygulamamızı kullanan insanlara “1 saat önce” , “2 hafta önce” gibi karşılaştırmalar sunabilmemiz için, kullanıcının cihazından lokal zaman dilimine ulaşıp mesela bir post için tutmuş olduğunuz UTC Date ile karşılaştırma hesapları yapmanız gerekiyor.
Öncelikle UTC Date alalım. Burada beklediğimiz date formatı “yyyy-MM-dd HH:mm:ss ZZZ” ancak unutulan önemli bir şey olduğunu o durumla karşılaşana kadar fark edemeyebilirsiniz.
Peki neden yıl-ay-gün formatı?
Uygulamanızda kullandığınız sorgu yapısına bağlı olmakla beraber eğer NoSQL bir database kullanıyorsanız. String tipinde olan bu bölümleri bazı durumlarda ihtiyacınıza göre sıralamanız gerekebilir. *Sıralama için ben timestamp (since1970) tercih ediyorum. Sıralarken büyüklük ölçütünün önde olması bir standart gerekliliğindendir.
*Date formatlama hakkında çeşitli yer tutucular ve anlamlarıyla beraber görebilmek için şurada bulunan cevaba bakabilirsiniz.
Nedir gözden kaçan o durum?
Tarih-saat belirteçleri global ölçekte özellikle ek olarak bir POSIX ayarına ihtiyaç duyarlar. Bunu yazmadığınız takdirde sizin belirttiğiniz global UTC formatına uymayabilir. Her şey çok iyi gider ama bir gün gitmez. Tarihi çekip karşılaştırma yaptığınız sırada bir de güvenli bir şekilde unwrap yapıp formatı kontrol etmediyseniz uygulamanın patlaması kaçınılmaz olmuş olur.
Evet tarih için doğru hamleyi alt satırda bulunana en_US_POSIX satırını 5.satırın önüne alarak yapabilirsiniz.
Sıra geldi kayıt ettiğimiz UTC tarihlerini nasıl iyi formatlanmış bir şekilde görüntüleyebiliriz konusuna. Bunun için bir global fonksiyon ya da extension yazabilirsiniz bu sizin tercihinize kalmış. Burada bir fonksiyon örneği mevcut. DateComponentsFormatter() işinizi kolaylaştıracaktır.
.unitsStyle için değişik format biçimleri de mevcut. Kısaltılmış halini daha fazla tercih ediyorum.
GitHub / Stackoverflow da ben.
Bir yazının daha sonunda geldik. Mutlu haftalar, iyi kodlamalar :)