Joda-Zaman ve java.time
desen e
yorumladığı nasıl bir fark var olan haftanın ilk gününü kontrol edebilirsiniz.
Joda-Zamanda
, e
desen designates the numeric value of day-of-week: Yani
Symbol Meaning Presentation Examples
------ ----------- ------------ -------
e day of week number 2
, e
Bir tarih nesneden haftanın gününü elde eşdeğerdir kullanarak:
// using org.joda.time.DateTime and org.joda.time.format.DateTimeFormat
DateTime d = new DateTime(2016, 12, 21, 20, 50, 25, 0, DateTimeZone.UTC);
DateTimeFormatter fmt = DateTimeFormat.forPattern("e").withLocale(Locale.ENGLISH);
System.out.println(d.toString(fmt)); // 3
System.out.println(d.getDayOfWeek()); // 3
System.out.println(d.dayOfWeek().getAsText(Locale.ENGLISH)); // Wednesday
Not Hem biçimlendirici hem de getDayOfWeek()
, 3
'u döndürür. getDayOfWeek()
method, DateTimeConstants
class ve Wednesday's value is 3
(numaralı telefonlara göre numaralı belgede) tanımlanan bir değer döndürür.java.time
API olarak
, desen e
has a different meaning:
Pattern Count Equivalent builder methods
------- ----- --------------------------
e 1 append special localized WeekFields element for numeric day-of-week
Lokalize WeekFields
elemanı kullanır ve bu yerel olarak değişebilir. biçimlendirici İngiliz yerel ayar için haftanın yerelleştirilmiş gün kullanılıyor
ZonedDateTime z = ZonedDateTime.of(2016, 12, 21, 20, 50, 25, 0, ZoneOffset.UTC);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("e", Locale.ENGLISH);
System.out.println(z.format(fmt)); // 4
System.out.println(z.getDayOfWeek()); // WEDNESDAY
System.out.println(z.getDayOfWeek().getValue()); // 3
Not olduğunu ve getDayOfWeek().getValue()
döner 3
çağrısında değeri 4
geçerli: getDayOfWeek()
yöntemine göre davranış farklı olabilir. İngilizce yerel ile e
kullanmaya eş değerdir çünkü var
bir java.time.temporal.WeekFields
: ISO'nun tanımı ilk günü olarak Pazartesi kullanması nedeniyle var
// same as getDayOfWeek()
System.out.println(z.get(WeekFields.ISO.dayOfWeek())); // 3
: ISO'nun tanımı kullanarak eşdeğerdir
// using localized fields
WeekFields wf = WeekFields.of(Locale.ENGLISH);
System.out.println(z.get(wf.dayOfWeek())); // 4
getDayOfWeek()
iken haftası, WeekFields
, ingilizce yerel saati ile kullanılır. Pazar:
// comparing the first day of week
System.out.println(WeekFields.ISO.getFirstDayOfWeek()); // MONDAY
System.out.println(wf.getFirstDayOfWeek()); // SUNDAY
e
desen, biçimlendiricideki (veya hiçbiri ayarlanmamışsa, JVM varsayılan yerel ayarı) ayarlanan yerel ayarlara göre farklı şekilde davranabilir veya getDayOfWeek()
yapamaz.
WeekFields.of(Locale.FRENCH).getFirstDayOfWeek(); // MONDAY
WeekFields.of(new Locale("ar", "AE")).getFirstDayOfWeek(); // SATURDAY
göre javadoc için, sayısal bir değer döndürür sadece desenler bazı arap yerellerde, haftanın ilk günü Cumartesi iken Fransız yerelinde, örneğin, sadece ISO gibi davranır Haftanın günü için yerelleştirilmiş olanlar gibi görünüyor.
String input = "2016-12-21 20:50:25 Wednesday December +0000 3";
DateTimeFormatter parser = new DateTimeFormatterBuilder()
// date/time pattern
.appendPattern("yyyy-MM-dd HH:mm:ss EEEE MMMM ZZ ")
// numeric day of week
.appendValue(ChronoField.DAY_OF_WEEK)
// create formatter with English locale
.toFormatter(Locale.ENGLISH);
ZonedDateTime date = ZonedDateTime.parse(input, parser);
: Yani giriş 2016-12-21 20:50:25 Wednesday December +0000 3
ayrıştırmak için, haftanın gününe (ISO olmayan yerel duyarlı alanı) sayısal değerini belirtmek için bir java.time.format.DateTimeFormatterBuilder
kullanabilir ve java.time.temporal.ChronoField
ile tarih/saat desen katılabilir Ayrıca, -
, :
ve boşluk karakterlerini belirtmeniz gerekmediğinden, desen daha net ve okunabilir hale gelir (IMO).
Ayrıca, ingilizce yerel ayarını da yapıyorum, çünkü ayarlamazsanız, JVM varsayılan yerel ayarını kullanır ve her zaman İngilizce olması garanti edilmez. Ayrıca, çalışma zamanında bile haber verilmeksizin değiştirilebilir, bu nedenle, girişin hangi dilde olduğunu biliyorsanız, özellikle belirtmek daha iyidir.
Güncelleme: o (JDK 1.8.0_144) appendText(ChronoField.DAY_OF_WEEK, TextStyle.NARROW_STANDALONE)
ve benim testlerde eşdeğer muhtemelen ccccc
desen döndürür (ve ayrıca ayrıştırır), çalışması gerekir 3
:
DateTimeFormatter parser = DateTimeFormatter
.ofPattern("yyyy-MM-dd HH:mm:ss EEEE MMMM ZZ ccccc", Locale.ENGLISH);
ZonedDateTime date = ZonedDateTime.parse(input, parser);
Ne zaman dilimi/locale kullanıyorsunuz, dokümanın haftanın yerelleştirilmiş günü olduğunu belirttiği gibi, bazı yereller pazartesi günü pazartesiye başlıyor – hardillb
pazartesi gününün aksine .wifyLocale (Locale.ENGLISH) ekledim; kodda. –