Komik: Neden bazı web sitelerinde yıl sonunda tarih kargaşası oluyor?

Yazar | Programlama Hakkında Konuşma

Sorumlu Editör | Elle

2019'un son günü evde yılbaşı partisini seyrederken, yılın son günü boş zamanlarının tadını çıkarırken, kız arkadaşım yanımda telefonda oynuyordu. Bir süre izledikten sonra aniden bana çok tuhaf sorular sordu.

Bu yüzden telefonunu aldım ve şu sahneyi gördüm:

bu WeChat Resmi hesap tarafından yönetilen resmi APP'nin etkileyici bir şekilde yazılmış tarihi 2020/12/29.

SimpleDateFormat

SimpleDateFormat, tarihleri biçimlendirmek ve ayrıştırmak için Java tarafından sağlanan bir araç sınıfıdır. Biçimlendirmeye izin verir (tarih- > Metin), ayrıştırma (metin- > Tarih) ve normalleştirme. SimpleDateFormat, herhangi bir kullanıcı tanımlı tarih-saat biçimi modelini seçmeyi mümkün kılar.

Java'da, bir Tarih türünü Dize türüne dönüştürmek için SimpleDateFormat biçim yöntemini kullanabilir ve çıktı biçimini belirtebilirsiniz.

// Dize Tarih Tarih verileri = yeni Tarih; SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM- gg SS: mm: ss "); Dize dataStr = sdf.format (veri); System.out.println (dataStr);

Yukarıdaki kod, dönüştürme sonucu: 2018-11-2513:00:00, tarih ve saat biçimi "tarih ve saat modu" dizesiyle belirtilir. Diğer biçimlere dönüştürmek istiyorsanız, farklı bir zaman modu belirtmeniz yeterlidir.

Java'da, bir String türünü Tarih türüne dönüştürmek için SimpleDateFormat'ın ayrıştırma yöntemini kullanabilirsiniz.

// Veriye Dize System.out.println (sdf.parse (dataStr));

Tarih ve saat modu ifade yöntemi

SimpleDateFormat kullanırken, saat öğelerini açıklamak ve bunları istenen tarih ve saat modelinde bir araya getirmek için harfler kullanmanız gerekir. Yaygın olarak kullanılan zaman öğeleri ve harflerin yazışma tablosu (JDK 1.8) aşağıdaki gibidir:

Desen harfleri genellikle tekrarlanır ve sayıları tam temsilini belirler. Daha önce kullandığımız gibi, "yyyy-MM- gg HH: mm: ss ".

Hafta Yılı nedir

Farklı ülkelerin haftanın başı ve sonu için farklı tanımları olduğunu biliyoruz. Örneğin Çin'de Pazartesi'yi haftanın ilk günü, Amerika Birleşik Devletleri'nde ise Pazar gününü haftanın ilk günü olarak kabul ediyoruz.

Benzer şekilde yılın ilk haftası hangi hafta olarak tanımlanır? Bu da bir problem, birçok yolu var.

Örneğin, aşağıdaki resim Aralık 2019'dan Ocak 2020'ye kadar olan bir takvimdir.

2020'nin ilk haftası hangi hafta? Farklı bölgeler ve ülkeler ve hatta farklı insanlar farklı anlayışlara sahiptir;

  • 1. 1 Ocak Çarşamba, sonraki Çarşamba (8 Ocak), bu 7 gün yılın ilk haftası olarak sayılır.

  • 2. Pazar (Pazartesi) haftanın yalnızca ilk günü olduğu için, 2020'nin ilk Pazarından (Pazartesi) 7 gün sonra yılın ilk haftası olarak sayılacaktır.

  • 3. 12.29, 12.30 ve 12.312019, 1.1, 1.2 ve 1.32020 olduğundan ve 1.4 Pazar gelecek haftanın başlangıcı olduğundan, ilk hafta yalnızca 1.1, 1.2 ve 1.3 olmalıdır.

ISO 8601

Farklı kişilerin tarih ve saat gösterim yöntemlerine ilişkin farklı anlayışları olduğundan, herkes ortaklaşa uluslararası bir standart oluşturmuştur: ISO 8601.

Uluslararası Standardizasyon Örgütü'nün uluslararası standardı ISO 8601, "veri saklama ve değişim formu, bilgi alışverişi, tarih ve saati ifade etme yöntemi" olarak adlandırılan, tarih ve saati ifade etme yöntemidir.

ISO 8601'de. Yılın ilk takvim haftası için dört eşdeğer terim vardır:

1. Yılın ilk Perşembe haftası;

2. 4 Ocak haftası;

3. Aynı hafta içinde en az 4 gün olan yılın ilk haftası;

4. Pazartesi, geçen yıl 29 Aralık'tan bu yıl 4 Ocak'a kadar olan haftaya denk gelir;

Bu standarda göre şunları hesaplayabiliriz:

2020'nin ilk haftası: 2019.12.29-2020.1.4

Dolayısıyla ISO 8601 standardına göre 29 Aralık 2019, 30 Aralık 2019 ve 31 Aralık 2019 tarihlerinin üç günü, gerçekte 2019'un son haftasına değil, 2020'nin ilk haftasına aittir.

ISO 8601 için JDK desteği

ISO 8601'deki takvim haftası ve gün gösterimi tanımına göre, 2019.12.29-2020.1.42020'nin ilk haftasıdır.

Günlük çalışmada böyle bir zorunluluğumuz olabilir: bir tarih girmek istiyoruz ve ardından program bize tarihin ait olduğu ISO 8601'deki takvim tarihi tanımına göre söyler.

Mesela 2019-12-20'ye girdiğimde bana bunun 2019 olduğunu söylüyor; 2019-12-30'a girdiğimde bana bunun 2020 olduğunu söylüyor.

Bu tür verileri sağlamak için Java 7, "YYYY" yi tanımlayıcı olarak yeni bir tarih modeli olarak tanıttı. Tanımlayıcı olarak "YYYY" kullanın ve ardından bir tarihin ait olduğu haftanın yılını almak için SimpleDateFormat kullanın.

Bu nedenle, kod aracılığıyla doğrulayabiliriz:

public class WeekYearTest { public static void main (String args) { SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM- gg "); SimpleDateFormat sdf1 = new SimpleDateFormat ("YYYY"); System.out.println (sdf1.format (sdf.parse ("2019-12-01"))); System.out.println (sdf1.format (sdf.parse ("2019-12-30"))); System.out.println (sdf1.format (sdf.parse ("2020-01-01"))); } }

Çıktı:

201920202020

2019-12-30, 2020'nin ilk haftasına ait olduğu için iade edilen yılın 2020 olduğu görülmektedir.

Ve "YYYY" yi "yyyy" olarak değiştirirseniz, çıktı şöyle olur:

201920192020

Bu durumdan dolayı günlük gelişimimizde Y olarak Y yazarsak tarih çıktı sonucunun beklentilerimizi karşılamamasına neden olabilir.

Tarihi belirtmek istediğimizde, yyyy-MM- kullanmalıyız gg YYYY-MM- yerine gg , İkisinin dönüş sonuçları çoğu durumda aynıdır, ancak aşırı durumlarda sorunlar olacaktır.

Yazarın IDEA'sı yüklü olduğu için < Alibaba Geliştirme Kılavuzu için eklenti > Bu nedenle, kodda "YYYY" kullanılırken, IDEA aşağıdaki komut istemini açacaktır:

Pekala, herkes kodunuzu hızlıca kontrol edin, var mı? YYYY-AA- gg Bu tür bir kod, varsa, değiştirilmelidir! ~

Yazar hakkında: Rambling Programming, sıkıcı olanı halka açık numaralarla açıklamaya yönelik bir tür komik + ses programlama bilgisidir. Programlamayı daha eğlenceli hale getirmeye kararlı.

Feragatname: Bu makale yazar tarafından sunulmuştur ve telif hakkı yazara aittir.

Jack Ma, Alibaba işten çıkarma söylentilerine yanıt veriyor; Yang Yuanqing düzenli olarak ayrılma hakkında konuşuyor; Arch Linux 2020.01.01 yayınlandı | Geek Manşetleri
önceki
Ubuntu'nun on yıllık incelemesi
Sonraki
Gelişmekte olan ilk on ön uç çerçevesi
TIOBE Ocak programlama dili sıralaması: C dili bir kez daha "C-bit" olarak tanıtıldı
IDEA Community Edition Tomcat'i desteklemiyor mu? Mükemmel bir çözüm
Açıklığa kavuşturmak! Kadın programcılar neden daha fazla para kazanıyor? Bu 4 büyük numara, para kazanmak için Python'u yan hat olarak kullanın
Microsoft, LinkedIn'i 26 milyar dolara satın aldıktan sonra hiçbir şey yapmadı mı?
"Linux bilmiyorsanız, nasıl programcı olabilirsiniz?" Hardcore programcı: Hiçbir şey yapamam
Trendin ardından, Google sadece bir taklittir
Güzel kız önce evlenir! Şirketin ilk üç aylık raporunun yarısından fazlasının "performans dalgasını" sürdürmesi bekleniyor
İngiltere Başbakanı'nın YBÜ'ye girişi, ABD hisse senetleri 1600 puandan fazla yükseliyor, çokuluslu borsa endeksleri teknik bir boğa piyasasına giriyor
Qingyi Poetry Magazine 2020 Sayı 13 (Toplam Sayı 93)
İlkbaharda gözlerimi açar açmaz gülmek istiyorum
Mavi Bulutların Dünyası | Qing Ci Yoğun Zarif Anlamı, Kırmızı Erik Göndermek İçin Kağıt Parçaları
To Top