Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
//License from project: Open Source License 

import android.util.Log;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {
    private static final String TAG = "DateUtils";
    /**
     * RFC 3339 date format for UTC dates.
     */
    public static final String RFC3339UTC = "yyyy-MM-dd'T'HH:mm:ss'Z'";
    /**
     * RFC 3339 date format for localtime dates with offset.
     */
    public static final String RFC3339LOCAL = "yyyy-MM-dd'T'HH:mm:ssZ";
    public static final String ISO8601_SHORT = "yyyy-MM-dd";
    private static ThreadLocal<SimpleDateFormat> RFC3339Formatter = new ThreadLocal<SimpleDateFormat>() {
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat(RFC3339UTC, Locale.US);
        }

    };
    private static ThreadLocal<SimpleDateFormat> ISO8601ShortFormatter = new ThreadLocal<SimpleDateFormat>() {
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat(ISO8601_SHORT, Locale.US);
        }

    };

    public static Date parseISO8601Date(String date) {
        if (date.length() > ISO8601_SHORT.length()) {
            return parseRFC3339Date(date);
        }
        Date result = null;
        if (date.length() == "YYYYMMDD".length()) {
            date = date.substring(0, 4) + "-" + date.substring(4, 6) + "-" + date.substring(6, 8);
        }
        SimpleDateFormat format = ISO8601ShortFormatter.get();
        try {
            result = format.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return result;
    }

    public static Date parseRFC3339Date(String date) {
        Date result = null;
        SimpleDateFormat format = RFC3339Formatter.get();
        boolean isLocal = date.endsWith("Z");
        if (date.contains(".")) {
            // remove secfrac
            int fracIndex = date.indexOf(".");
            String first = date.substring(0, fracIndex);
            String second = null;
            if (isLocal) {
                second = date.substring(date.length() - 1);
            } else {
                if (date.contains("+")) {
                    second = date.substring(date.indexOf("+"));
                } else {
                    second = date.substring(date.indexOf("-"));
                }
            }

            date = first + second;
        }
        if (isLocal) {
            try {
                result = format.parse(date);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        } else {
            format.applyPattern(RFC3339LOCAL);
            // remove last colon
            StringBuffer buf = new StringBuffer(date.length() - 1);
            int colonIdx = date.lastIndexOf(':');
            for (int x = 0; x < date.length(); x++) {
                if (x != colonIdx)
                    buf.append(date.charAt(x));
            }
            String bufStr = buf.toString();
            try {
                result = format.parse(bufStr);
            } catch (ParseException e) {
                e.printStackTrace();
                Log.e(TAG, "Unable to parse date");
            } finally {
                format.applyPattern(RFC3339UTC);
            }

        }

        return result;

    }
}