Yaklaşık altı yıldır profesyonel bir geliştiriciyim. Bu altı yıl boyunca hiçbir zaman bir şirkette veya herhangi bir şekilde tarih ve saat sorunlarıyla uğraşmayan bir projede çalışmadım.



Üzerinde çalışacağınız neredeyse her uygulama, bir şekilde zamanın kullanılmasını gerektirir, yani bir noktada tarihleri ​​veya saatleri toplamanız, saklamanız, almanız ve görüntülemeniz gerekecek. Tarihler veya zamanlarla uğraşmak için sihirli bir değnek yoktur ve zaman kavramımızın doğasında bulunan karmaşıklıktan asla kaçamazsınız, ancak onu daha az acı verici hale getirmek için atabileceğiniz adımlar vardır.



Farklı programlama dillerinde zamanla çalıştığım yıllarda, aşağıdaki bilginin çok yol kat ettiğini gördüm.

Doğru Veri Biçimini Seçmek

Saatler ve tarihlerle çalışırken ilk adım, verileriniz için bir temsil seçmektir. Farklı biçimler aşağı yukarı aynı görünse de, seçtiğiniz biçimin kodunuzu nasıl yazdığınız ve hata ayıkladığınız üzerinde büyük bir etkisi olacaktır.

Bir tarihe ihtiyaç duyduğunuzda sayısal bir zaman damgası kullanmak, tarih zaman damgasını ayrıştırmak ve ondan tarihi almak anlamına gelir; bu, saat dilimine bağlı olarak basit olabilir veya olmayabilir.


737 ne anlama geliyor

Bir süreyi temsil etmek için özel bir dize kullanmak, saklamak ve değiştirmek kolay gibi görünse de sorgulamak zordur. Ek olarak, insan gözü tarafından hemen tanınmayan herhangi bir temsil türünü kullanmak, kodunuzda hata ayıklamayı daha zor hale getirecektir.

Tarihler veya saatler için bir format seçerken, aşağıdaki kurallara uyarım:



  1. Asla sayısal zaman damgaları kullanmayın. Çeşitli programlama dilleri arasında standart kitaplıklar tarafından elde edilmesi genellikle en kolay olanlardır, ancak insanlar tarafından okunamazlar ve onları manipüle etmenin cazibesi çok güçlüdür.
  2. Bağlı kal ISO 8601 , tarih ve saatle ilgili veriler için bir format tanımlayan bir standart. ISO 8601'in varyasyonlarının üstesinden gelebilecek herhangi bir dil için bir kitaplık bulmak önemsizdir.
  3. ISO 8601 bir standarttır, ancak birçok çeşidi vardır. Her zaman ISO 8601'in en okunabilir varyantını seçmelisiniz. Bu fazladan çaba gerektirmez, ancak hata ayıklamayı kolaylaştırır.
  4. Zaman damgası dizeniz yalnızca kesinlikle ihtiyacınız olan verileri içermelidir. Zamanlarla çalışırken dizeniz bir tarih içermemelidir ve saat diliminden bağımsız bir tarihle çalışırken dizeniz bir saat dilimi içermemelidir. Ek bilgi eklemek, ayrıştırma işlemine ve gelecekteki geliştiriciler için verilerin amacına belirsizlik katar
  5. Zaman dilimlerini depolarken, zaman damgalarınızda her zaman aynı saat dilimine normalize edin. Bu sadece bir bilgisayarın verileri sıralayıp işlemesini kolaylaştırmakla kalmaz, aynı zamanda bir insan geliştirici için de kolaylaştırır.

Bu kurallara uymak size çok pahalıya mal olmaz, ancak başvurunuz kurulduğunda hayatınızı kolaylaştırır ve saat ve tarih kullanımınızın beklediğiniz gibi olmadığını görürsünüz.

Doğru Aracı Seçme

Sektörümüzdeki çoğu problemde olduğu gibi, saat ve tarih yönetimi, iş için doğru aracı seçmeye bağlıdır.

Araçları favori dilinizin standart kitaplığında kullanmak cazip gelebilir, ancak bu en iyi seçim olmayabilir. Bazı standart kitaplıklar harika tarih ve saat özelliklerine (Python) sahipken, diğerleri düpedüz acınacak durumdadır (Javascript). Yanlış aracı kullanmak, zamana dayalı özellikler geliştirmeyi çok daha zor hale getirir ve bu da hataların uygulamanıza girmesini kolaylaştırır.



Tarihleri ​​ve saatleri işlemek için iyi bir kitaplık, yukarıda belirtilen 5 kurala uymanıza izin verecektir. Özellikle şunları yapabilmelidir:

  • Karşılaşabileceğiniz herhangi bir tarih temsilini ayrıştırın (harici temsiller dahil.)
  • İhtiyaç duyabileceğiniz herhangi bir tarih temsili için çıktı (dış temsiller dahil).
  • Tarih ve saatleri, zaman birimlerini ekleyerek veya bunlardan çıkararak değiştirin.
  • Tarihleri ​​ve saatleri karşılaştırın.
  • Saat dilimleri arasında doğru şekilde dönüştürün.

Kitaplığınızın bu özellikleri desteklemesi önemlidir, aksi takdirde işlevi kendiniz uygulamaya çalışma isteği çok yüksek olacaktır. Ve daha açık olmak gerekirse, bu işlevlerden herhangi birini kendiniz uygulamaya çalışırsanız, başarısız olursunuz.

Kendi zaman damgalarınızı normal ifadelerle ayrıştırmayın, normal bir sayı gibi göründüğü için sayısal bir zaman damgasına saniye eklemeyin ve eşitlik operatörünü kullanarak tarihleri ​​ve saatleri karşılaştırmayın. Bu kitaplıklar var çünkü bu sorunların çözülmesi zor ve uygulamanızdaki tekerleği yeniden icat etmek sizi kırık bir tekerlekle bırakacak.

Aşağıda, bu kriterlere uyan kütüphaneler için birkaç önerim var:

Dil Kütüphane
Python Standart Kitaplık
Javascript An ve Moment Saat Dilimi
Java 8 ve üstü Standart Kitaplık (java.time)
Java 7 ve altı Joda-Zaman
Swift SwiftDate

Diliniz listelenmemişse (çünkü yeterince aşina olmadığım için) tarih ve saat kitaplığını arayın. Muhtemelen ihtiyacınız olan her şeyi yapacak iyi bir kitaplık bulacaksınız.

Zamanı Bilmek

Paylaşmam gereken son bilgi, tarihler ve saatlerle çalışmaya özgü değil, daha çok sorunlardan kaçınmamıza yardımcı olacak genel bir felsefedir ve programlamadaki diğer tüm problemler kadar tarih ve saat işlemeye de uygulanır. .

Her zaman varsayımlarınızı kontrol edin.

Sunulan her soruna geniş bir bilgi birikimi ve daha da geniş bir varsayımlar bütünü ile yaklaşıyoruz. Tarihleri ​​ve saatleri ele alırken, senaryonuz için hala geçerli olduklarından emin olmak için varsayımlarınızı kontrol etmek her zamankinden daha önemlidir.

Bu liste Falsehoods Programmers Believe About Time başlıklı, zamanın muhtemelen sizin düşündüğünüz gibi olmadığını gösteren birçok mükemmel örnek veriyor. Zamana odaklanan bir özellik tasarlarken veya geliştirirken, bir iş ortağı bulmanızı ve listelenen tuzaklardan kaçınmanızı sağlamak için bu listeyi incelemenizi öneririm.

Zaman hatalarının yakalanması ve test edilmesi çok daha zordur. Bu listeyi göz önünde bulundurarak geliştirirseniz, müşterilerinizi etkileyebilecek ancak yakalayamayabilecekleri (en kötü türden bir hata!) İnce hataları önleyebilirsiniz.

Zaman dilimleri

Zaman dilimlerinden bahsedilmeden saatler veya tarihlerle ilgili hiçbir tartışma tamamlanmayacaktır. Yukarıda listelenen yaygın yanlışları öğrenmenin yanı sıra, zaman dilimlerinin temellerini de öğrenin.

Zaman dilimleri, zamanla çalışırken, 'hepsini anladığınızı' düşünseniz bile, sürekli olarak bir acı noktası olacaktır. Saat dilimleri hakkında biraz bilgi sahibi olmak, düşüncenizi merkeze almanıza ve zamanları değiştirirken herhangi bir mantık hatası yapmamanıza yardımcı olur.

Ne yazık ki, programlama sırasında zaman ve tarihleri ​​kaydetme ve değiştirme zorluğundan tamamen kaçınmanın bir yolu yoktur. Ancak bu adımları izlerseniz ve bu bilgiyi akılda tutarak çalışırsanız, yazmanız gereken kod miktarını azaltarak ve kendinizi sorun yaratma olasılığı daha düşük olan paradigmalara zorlayarak görevi kolaylaştırabilirsiniz.

Arkadaşlarınla ​​Paylaş: