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ı:
2019202020202019-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:
201920192020Bu 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.