Java Date + TimzeZone + Locale + DateFormat

Time in Java Date is the number of milliseconds since January 1, 1970, 00:00:00 GMT, it's timezone-agnostic. (the getYear/Month/Date are dprecated because they are timezone-related.)

When we format the date to a string, we need specify what timezone and what locale to use.
If not specified, it will use time zone and locale in current system.

So if we use the number, time zone doesn't matter. But if we store the deate string or use it to query, we should always use UTC and locale incenstive SimpleDateFormat  to format date object.
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ROOT);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
public static void main(final String[] args) {
    TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", new Locale("en", "US"));
    Date date = new Date();
    // 1456470936828 PST(-8:00):2016-02-25T23:15:36.828Z
    System.out.println(date.getTime() + " PST(-8:00):" + sdf.format(date));
    System.out.println(date.getDate());// 25

    TimeZone.setDefault(TimeZone.getTimeZone("America/New_York"));
    sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", new Locale("en", "US"));
    date = new Date();
    // 1456470936829 EST(-5:00):2016-02-26T02:15:36.829Z
    System.out.println(date.getTime() + " EST(-5:00):" + sdf.format(date));
    System.out.println(date.getDate()); // 26

    // use Locale.ROOT, UTC
    sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ROOT);
    // 1456470936829 UTC:2016-02-26T07:15:36.829Z
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    System.out.println(date.getTime() + " UTC:" + sdf.format(date));
    System.out.println(date.getDate()); // 26

    // use org.apache.solr.common.util.DateUtil
    // 2016-02-26T07:15:36.829Z
    System.out.println(DateUtil.getThreadLocalDateFormat().format(date));
}
org.apache.solr.common.util.DateUtil
public static DateFormat getThreadLocalDateFormat() {
  return fmtThreadLocal.get();
}

public static TimeZone UTC = TimeZone.getTimeZone("UTC");
private static ThreadLocalDateFormat fmtThreadLocal = new ThreadLocalDateFormat();

private static class ThreadLocalDateFormat extends ThreadLocal<DateFormat> {
  DateFormat proto;

  public ThreadLocalDateFormat() {
    super();
    //2007-04-26T08:05:04Z
    SimpleDateFormat tmp = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ROOT);
    tmp.setTimeZone(UTC);
    proto = tmp;
  }

  @Override
  protected DateFormat initialValue() {
    return (DateFormat) proto.clone();
  }
}

Solr removes DateUtil in later release. We can use Apache HttpClient org.apache.http.client.utils.DateUtils.parseDate(String, String[]) to parse the date using multiple date formats.
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Post a Comment

Labels

Java (159) Lucene-Solr (110) All (60) Interview (59) J2SE (53) Algorithm (37) Eclipse (35) Soft Skills (35) Code Example (31) Linux (26) JavaScript (23) Spring (22) Windows (22) Web Development (20) Tools (19) Nutch2 (18) Bugs (17) Debug (15) Defects (14) Text Mining (14) J2EE (13) Network (13) PowerShell (11) Chrome (9) Continuous Integration (9) How to (9) Learning code (9) Performance (9) UIMA (9) html (9) Design (8) Dynamic Languages (8) Http Client (8) Maven (8) Security (8) Trouble Shooting (8) bat (8) blogger (8) Big Data (7) Google (7) Guava (7) JSON (7) Problem Solving (7) ANT (6) Coding Skills (6) Database (6) Scala (6) Shell (6) css (6) Algorithm Series (5) Cache (5) IDE (5) Lesson Learned (5) Miscs (5) Programmer Skills (5) System Design (5) Tips (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) OpenNLP (4) Project Managment (4) Python (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Firefox (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Google Drive (2) Gson (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Bit Operation (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Troubleshooting (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts