java - How to use Calendar.getInstance with specified Locale -
i trying use calendar.getinstance(locale l) specified locale , not working. cannot figure out doing wrong.
the java doc. say:
getinstance public static calendar getinstance(locale alocale) gets calendar using default time zone , specified locale. the calendar returned based on current time in default time zone given locale. parameters: alocale - locale week data returns: calendar.
my code:
public static void main (string[] args){ locale local = new locale("pt", "br"); calendar c = calendar.getinstance(local); // here using method system.out.println(c.gettime()); // , here, cannot figure out why not working dateformat dt = dateformat.getdateinstance(dateformat.long, local); string s = dt.format(c.gettime()); system.out.println(s); // here example in portuguese brasil } output:
wed apr 29 10:18:16 brt 2015
29 de abril de 2015
should first print must in locale("pt", "br"), in portuguese?
the answer loc correct: call calendar::gettime produces java.util.date object. java.util.date class has no explicit time zone yet tostring method confusingly applies jvm’s current default time zone while generating string.
all confusing names , behavior - of many reasons avoid these poorly designed, confusing, , troublesome old legacy date-time classes. instead should using java.time classes officially supplant old classes.
java.time
get current moment in utc. instant class represents moment on timeline in utc resolution of nanoseconds (up 9 (9) digits of decimal fraction).
instant instant = instant.now(); you can create string represent value standard iso 8601 formatting calling tostring.
string output = instant.tostring(); 2016-09-28t19:38:21z
the code in question ignores issue of time zone. when not specify time zone jvm’s current default time zone implicitly applied. better specify explicitly.
note locale , time zone 2 separate distinct issues.
localedetermine (a) human language translation of name of day, name of month, , such, , (b) cultural norms deciding issues of abbreviation, capitalization, punctuation, , such.- time zone determines wall-clock time used present date-time value.
you can have combination of two. example, time zone of kolkata india french locale, or brazil portuguese locale auckland new zealand time zone.
locale locale = new locale("pt", "br"); zoneid z = zoneid.of( "pacific/auckland" ); apply time zone zoneid produce zoneddatetime. conceptually, think of zoneddatetime = ( instant + zoneid ).
specify proper time zone name in format of continent/region. never use 3-4 letter abbreviation such est or ist not true time zones, not standardized, , not unique(!).
zoneddatetime zdt = instant.atzone( z ); the locale not affect meaning, on presentation. can let locale object drive automatic localization of when producing string represent date-time value via datetimeformatter class. specify formatstyle determine how long or abbreviated should string be.
datetimeformatter f = datetimeformatter.oflocalizeddatetime( formatstyle.full ) .withlocale( locale ); string output = zdt.format( f ); dump console. instant , zdt objects seen here represent same moment, same point on timeline. difference view through lens of different region’s wall-clock time.
system.out.println ( "instant.tostring(): " + instant + " | zdt: " + zdt + " | output: " + output ); instant.tostring(): 2016-09-28t20:20:38.242z | zdt: 2016-09-29t09:20:38.242+13:00[pacific/auckland] | output: quinta-feira, 29 de setembro de 2016 09h20min38s nzdt
conversion
avoid old .date , .calendar classes. if must use them old code not yet updated java.time types, can convert. use new methods added old classes. here call java.util.gregoriancalendar.from( zoneddatetime ).
java.util.calendar cal = java.util.gregoriancalendar.from( zdt ) ; and, going other direction:
zoneddatetime zdt = mygregoriancalendar.tozoneddatetime() ; about java.time
the java.time framework built java 8 , later. these classes supplant troublesome old date-time classes such java.util.date, .calendar, & java.text.simpledateformat.
the joda-time project, in maintenance mode, advises migration java.time.
to learn more, see oracle tutorial. , search stack overflow many examples , explanations.
much of java.time functionality back-ported java 6 & 7 in threeten-backport , further adapted android in threetenabp (see how use…).
the threeten-extra project extends java.time additional classes. project proving ground possible future additions java.time. may find useful classes here such interval, yearweek, yearquarter, , more.
Comments
Post a Comment