Java tutorial
/** * 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 }; } }