Java Date Convert convertTweetDateToLong(String date)

Here you can find the source of convertTweetDateToLong(String date)

Description

Convert a given date according to a format used by Twitter to long.

License

Open Source License

Parameter

Parameter Description
date Tweet date value.

Exception

Parameter Description
IllegalArgumentException If date is null/empty.

Return

Long date.

Declaration

public static long convertTweetDateToLong(String date) 

Method Source Code

//package com.java2s;

import java.util.Calendar;
import java.util.Vector;

public class Main {
    /**//from ww w  . java2  s .  c o  m
     * <p>
     * Months abbreviations.
     * </p>
     */
    private static final String[] MONTHS_ABBREVIATION = new String[] { "jan", "feb", "mar", "apr", "may", "jun",
            "jul", "aug", "sep", "oct", "nov", "dec" };

    /**
     * <p>
     * Convert a given date according to a format used by Twitter to long. 
     * </p>
     * <p>
     * Formats:
     * <lu>
     * <li>2009-11-28 21:43:12</li>
     * <li>2009-12-01T01:25:00+00:00</li>
     * <li>Sat Nov 07 21:30:03 +0000 2009</li>
     * </lu>
     * </p>
     * @param date Tweet date value.
     * @return Long date.
     * @throws IllegalArgumentException If date is null/empty.
     */
    public static long convertTweetDateToLong(String date) {
        if (date == null || (date = date.trim()).length() == 0) {
            throw new IllegalArgumentException("Date must not be null/empty.");
        }
        //
        char fc = date.charAt(0);
        //)
        if (Character.isDigit(fc)) { //is date format 1?
            date = formatTweetDate1(date);
        } else { //date format 2.
            date = formatTweetDate2(date);
        }
        //
        String[] parts = split(date, ' ');
        String[] dparts = split(parts[0], '-');
        String[] tparts = split(parts[1], ':');
        //
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, Integer.parseInt(dparts[0]));
        c.set(Calendar.MONTH, Integer.parseInt(dparts[1]) - 1);
        c.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dparts[2]));
        c.set(Calendar.HOUR_OF_DAY, Integer.parseInt(tparts[0]));
        c.set(Calendar.MINUTE, Integer.parseInt(tparts[1]));
        c.set(Calendar.SECOND, Integer.parseInt(tparts[2]));
        c.set(Calendar.MILLISECOND, 0);
        //
        String dim = Long.toString(c.getTime().getTime());
        dim = dim.substring(0, dim.length() - 3);
        //
        return Long.parseLong(dim);
    }

    /**
     * <p>
     * Convert a given date according to a format used by Twitter to String. For
     * instance, "2009-11-28 21:43:12" or "2009-11-28T21:43:12+00:00" to
     * "2009-11-28 21:43:12".
     * </p>
     * @param date Tweet date value.
     * @return Date.
     */
    private static String formatTweetDate1(String date) {
        //2009-11-28 21:43:12
        //2009-12-01T01:25:00+00:00
        return date.substring(0, 10) + ' ' + date.substring(11, 19);
    }

    /**
     * <p>
     * Convert a given date according to a format used by Twitter to String. For
     * instance, "Sat Nov 07 21:30:03 +0000 2009" to "2009-11-07 21:30:03".
     * </p>
     * @param date Tweet date value.
     * @return Date.
     */
    private static String formatTweetDate2(String date) {
        //Sat Nov 07 21:30:03 +0000 2009
        //
        String[] dtps = split(date, ' ');
        String mon = dtps[1].toLowerCase();
        //
        for (int i = 0; i < MONTHS_ABBREVIATION.length; i++) {
            if (mon.equals(MONTHS_ABBREVIATION[i])) {
                return dtps[5] + '-' + zeroPad((i + 1), 2) + '-' + dtps[2] + ' ' + dtps[3];
            }
        }
        //
        throw new IllegalArgumentException("Invalid date format: " + date);
    }

    /**
      * <p>
      * Split a string based on a given delimiter.
      * </p>
      * @param str String.
      * @param delimiter Delimiter.
      * @return String tokens.
      * @throws IllegalArgumentException If str is null.
      */
    public static final String[] split(String str, char delimiter) {
        if (str == null) {
            throw new IllegalArgumentException("Str must not be null.");
        }
        //
        Vector v = new Vector();
        int start = 0;
        int iof;
        //
        while ((iof = str.indexOf(delimiter, start)) != -1) {
            v.addElement(str.substring(start, iof).trim());
            start = iof + 1;
        }
        //
        v.addElement(str.substring(start, str.length()).trim());
        String[] codes = new String[v.size()];
        v.copyInto(codes);
        //
        return codes;
    }

    /**
     * <p>
     * Return a padded string with leading zeros. 
     * </p>
     * @param n Number.
     * @param len String length.
     * @return Padded string.
     */
    public static String zeroPad(int n, int len) {
        String s = n + "";
        //
        for (int i = len - s.length(); i > 0; i--) {
            s = '0' + s;
        }
        //
        return s;
    }
}

Related

  1. convertToClientTime(Date serverDate, Integer clientTimezoneOffset)
  2. convertToDate(String source)
  3. convertToDateStamp(long time)
  4. convertToDateTime(String source)
  5. convertToStartOfDay(Date date)
  6. convertZeroHourDate(Date source)
  7. dateToCal(Date date)
  8. dateToEnglishString(java.util.Date date)
  9. dateToFMDate(Date date)