ph.fingra.statisticsweb.common.util.DateTimeUtil.java Source code

Java tutorial

Introduction

Here is the source code for ph.fingra.statisticsweb.common.util.DateTimeUtil.java

Source

/**
 * Copyright 2014 tgrape Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package ph.fingra.statisticsweb.common.util;

import java.io.IOException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import org.joda.time.DateTime;

public class DateTimeUtil {

    /**
     * *** Fingra.ph DateTimeUtil Information ***
     * 
     * Locale - UK
     * FirstDayOfWeek - MONDAY (Not SUNDAY!!!)
     * MinimalDaysInFirstWeek - 4
     * 
     */

    public static Date check(String src, String format) throws ParseException {

        if (src == null)
            throw new ParseException("date string to check is null", 0);
        if (format == null)
            throw new ParseException("format string to check date is null", 0);

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);

        Date date = null;
        try {
            date = formatter.parse(src);
        } catch (ParseException e) {
            throw new ParseException(" wrong date:\"" + src + "\" with format \"" + format + "\"", 0);
        }

        return date;
    }

    public static boolean isValidDate(String src, String format) {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);
        @SuppressWarnings("unused")
        Date date = null;

        try {
            date = formatter.parse(src);
        } catch (ParseException e) {
            return false;
        }

        return true;
    }

    public static String getTodayFormatString(String pattern) {

        SimpleDateFormat formatter = new SimpleDateFormat(pattern, Locale.UK);
        return formatter.format(new Date());
    }

    public static String getYesterdayFormatString(String format) {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);

        Date date = new Date();
        date.setTime(date.getTime() - (1 * 1000 * 60 * 60 * 24));

        return formatter.format(date);
    }

    public static String getOnehouragoFormatString(String format) {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);

        Date date = new Date();
        date.setTime(date.getTime() - (1 * 1000 * 60 * 60));

        return formatter.format(date);
    }

    public static int getWeekOfYearByDay(String year, String month, String day) {

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        calendar.set(Calendar.YEAR, Integer.parseInt(year));
        calendar.set(Calendar.MONTH, Integer.parseInt(month) - 1);
        calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));

        long milltimes = calendar.getTimeInMillis();

        calendar.setTimeInMillis(milltimes);

        int week = calendar.get(Calendar.WEEK_OF_YEAR);

        return week;
    }

    public static int getDayofWeekByDay(String year, String month, String day) {

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        calendar.set(Calendar.YEAR, Integer.parseInt(year));
        calendar.set(Calendar.MONTH, Integer.parseInt(month) - 1);
        calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));

        long milltimes = calendar.getTimeInMillis();

        calendar.setTimeInMillis(milltimes);

        int ndayofweek = calendar.get(Calendar.DAY_OF_WEEK);

        return ndayofweek;
    }

    public static String startDayOfWeek(String year, int week, String format) {

        SimpleDateFormat dayFormat = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        calendar.set(Calendar.YEAR, Integer.parseInt(year));
        calendar.set(Calendar.WEEK_OF_YEAR, week);
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

        Date date = calendar.getTime();

        String start_day = dayFormat.format(date);

        return start_day;
    }

    public static String lastDayOfWeek(String year, int week, String format) {

        SimpleDateFormat dayFormat = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        calendar.set(Calendar.WEEK_OF_YEAR, week);
        calendar.set(Calendar.YEAR, Integer.parseInt(year));
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);

        Date date = calendar.getTime();

        String end_day = dayFormat.format(date);

        return end_day;
    }

    public static String startDayOfMonth(String year, String month, String format) {

        SimpleDateFormat dayFormat = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);

        calendar.set(Calendar.YEAR, Integer.parseInt(year));
        calendar.set(Calendar.MONTH, (Integer.parseInt(month) - 1));
        calendar.set(Calendar.DAY_OF_MONTH, 1);

        Date date = calendar.getTime();

        String start_day = dayFormat.format(date);

        return start_day;
    }

    public static String lastDayOfMonth(String year, String month, String format) {

        SimpleDateFormat dayFormat = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);

        calendar.set(Calendar.YEAR, Integer.parseInt(year));
        calendar.set(Calendar.MONTH, (Integer.parseInt(month) - 1));
        calendar.set(Calendar.DAY_OF_MONTH, 1);

        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.DAY_OF_MONTH, -1);

        Date date = calendar.getTime();

        String end_day = dayFormat.format(date);

        return end_day;
    }

    public static String addDays(String src, int day, String format) throws IOException {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        Date date = null;
        try {
            date = formatter.parse(src);
        } catch (ParseException e) {
            throw new IOException(e.getMessage());
        }

        date.setTime(date.getTime() + ((long) day * 1000 * 60 * 60 * 24));

        return formatter.format(date);
    }

    public static String addMonths(String src, int addMonth, String format) throws IOException {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);
        SimpleDateFormat informatter = new SimpleDateFormat("yyyyMMdd", Locale.UK);
        SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", Locale.UK);
        SimpleDateFormat monthFormat = new SimpleDateFormat("MM", Locale.UK);
        SimpleDateFormat dayFormat = new SimpleDateFormat("dd", Locale.UK);
        DecimalFormat fourDf = new DecimalFormat("0000");
        DecimalFormat twoDf = new DecimalFormat("00");

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        Date date = null;
        try {
            date = formatter.parse(src);
        } catch (ParseException e) {
            throw new IOException(e.getMessage());
        }

        int year = Integer.parseInt(yearFormat.format(date));
        int month = Integer.parseInt(monthFormat.format(date));
        int day = Integer.parseInt(dayFormat.format(date));

        month += addMonth;
        if (addMonth > 0) {
            while (month > 12) {
                month -= 12;
                year += 1;
            }
        } else {
            while (month <= 0) {
                month += 12;
                year -= 1;
            }
        }

        String tempdate = String.valueOf(fourDf.format(year)) + String.valueOf(twoDf.format(month))
                + String.valueOf(twoDf.format(day));

        Date targetdate = null;
        try {
            targetdate = informatter.parse(tempdate);
        } catch (ParseException e) {
            throw new IOException(e.getMessage());
        }

        return formatter.format(targetdate);
    }

    public static String addYears(String src, int year, String format) throws IOException {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        Date date = null;
        try {
            date = formatter.parse(src);
        } catch (ParseException e) {
            throw new IOException(e.getMessage());
        }

        date.setTime(date.getTime() + ((long) year * 1000 * 60 * 60 * 24 * (365 + 1)));

        return formatter.format(date);
    }

    public static int secondsBetween(String from, String to, String format) throws IOException {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        Date date1 = null;
        Date date2 = null;
        try {
            date1 = formatter.parse(from);
            date2 = formatter.parse(to);
        } catch (ParseException e) {
            throw new IOException(e.getMessage());
        }

        long duration = date2.getTime() - date1.getTime();

        return (int) (duration / 1000);
    }

    public static int minutesBetween(String from, String to, String format) throws IOException {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        Date date1 = null;
        Date date2 = null;
        try {
            date1 = formatter.parse(from);
            date2 = formatter.parse(to);
        } catch (ParseException e) {
            throw new IOException(e.getMessage());
        }

        long duration = date2.getTime() - date1.getTime();

        return (int) (duration / (1000 * 60));
    }

    public static int hoursBetween(String from, String to, String format) throws IOException {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        Date date1 = null;
        Date date2 = null;
        try {
            date1 = formatter.parse(from);
            date2 = formatter.parse(to);
        } catch (ParseException e) {
            throw new IOException(e.getMessage());
        }

        long duration = date2.getTime() - date1.getTime();

        return (int) (duration / (1000 * 60 * 60));
    }

    public static int daysBetween(String from, String to, String format) throws IOException {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        Date date1 = null;
        Date date2 = null;
        try {
            date1 = formatter.parse(from);
            date2 = formatter.parse(to);
        } catch (ParseException e) {
            throw new IOException(e.getMessage());
        }

        long duration = date2.getTime() - date1.getTime();

        return (int) (duration / (1000 * 60 * 60 * 24));
    }

    public static int monthsBetween(String from, String to, String format) throws IOException {

        SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.UK);

        Calendar calendar = Calendar.getInstance(Locale.UK);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);

        Date fromDate = null;
        Date toDate = null;
        try {
            fromDate = formatter.parse(from);
            toDate = formatter.parse(to);
        } catch (ParseException e) {
            throw new IOException(e.getMessage());
        }

        if (fromDate.compareTo(toDate) == 0)
            return 0;

        SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", Locale.UK);
        SimpleDateFormat monthFormat = new SimpleDateFormat("MM", Locale.UK);
        SimpleDateFormat dayFormat = new SimpleDateFormat("dd", Locale.UK);

        int fromYear = Integer.parseInt(yearFormat.format(fromDate));
        int toYear = Integer.parseInt(yearFormat.format(toDate));
        int fromMonth = Integer.parseInt(monthFormat.format(fromDate));
        int toMonth = Integer.parseInt(monthFormat.format(toDate));
        int fromDay = Integer.parseInt(dayFormat.format(fromDate));
        int toDay = Integer.parseInt(dayFormat.format(toDate));

        int result = 0;
        result += ((toYear - fromYear) * 12);
        result += (toMonth - fromMonth);

        // ceil & floor
        if (((toDay - fromDay) > 0))
            result += toDate.compareTo(fromDate);

        return result;
    }

    public static String[] getDashboardFromToWithPrev(String numType) {

        int num = Integer.parseInt(numType.substring(0, numType.length() - 1));
        String type = numType.substring(numType.length() - 1).toLowerCase();
        final DateTime now = DateTime.now();
        final DateTime to = now.minusDays(1);

        final DateTime from = type.equals("w") ? to.minusDays(num * 7 - 1)
                : (type.equals("m") ? to.minusMonths(num) : to.withMonthOfYear(1).withDayOfMonth(1));
        final DateTime prevTo = type.equals("y") ? to.minusYears(1) : from.minusDays(1);
        final DateTime prevFrom = type.equals("w") ? prevTo.minusDays(num * 7 - 1)
                : (type.equals("m") ? prevTo.minusMonths(num) : prevTo.withMonthOfYear(1).withDayOfMonth(1));

        final DateTime yesterday = now.minusDays(1);
        final DateTime beforeYesterday = now.minusDays(2);
        String nowTime = "";
        String prevTime = "";

        // before or after 10 minutes
        if (now.getMinuteOfHour() < 10) { // before 10 minutes 
            String nowTemp = now.equals("0") ? "23" : String.valueOf(now.getHourOfDay() - 1);
            nowTime = (nowTemp.length() < 2) ? nowTemp = "0" + nowTemp : nowTemp;
            String prevTemp = nowTime.equals("00") ? "23" : String.valueOf(Integer.parseInt(nowTime) - 1);
            prevTime = (prevTemp.length() < 2) ? prevTemp = "0" + prevTemp : prevTemp;
            System.out.println("10    " + now.getMinuteOfHour() + "");
        } else { // after 10 minutes
            nowTime = (String.valueOf(now.getHourOfDay()).length() < 2) ? "0" + String.valueOf(now.getHourOfDay())
                    : String.valueOf(now.getHourOfDay());
            String prevTemp = now.equals("0") ? "23" : String.valueOf(now.getHourOfDay() - 1);
            prevTime = (prevTemp.length() < 2) ? prevTemp = "0" + prevTemp : prevTemp;
            System.out.println("10    " + now.getMinuteOfHour() + "");
        }

        return new String[] { from.toString("yyyy-MM-dd"), to.toString("yyyy-MM-dd"),
                prevFrom.toString("yyyy-MM-dd"), prevTo.toString("yyyy-MM-dd"), yesterday.toString("yyyy-MM-dd"),
                beforeYesterday.toString("yyyy-MM-dd"), now.toString("yyyy-MM-dd"), nowTime, prevTime };
    }
}