/**
* Odoo, Open Source Management Solution
* Copyright (C) 2012-today Odoo SA (<http:www.odoo.com>)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http:www.gnu.org/licenses/>
*
* Created on 31/12/14 11:36 AM
*/
package com.odoo.core.utils;
import android.util.Log;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
public class ODateUtils {
public final static String TAG = ODateUtils.class.getSimpleName();
public static final String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
/**
* Return Current date string in "yyyy-MM-dd HH:mm:ss" format
*
* @return current date string (Default timezone)
*/
public static String getDate() {
return getDate(new Date(), DEFAULT_FORMAT);
}
/**
* Returns current date string in given format
*
* @param format, date format
* @return current date string (Default timezone)
*/
public static String getDate(String format) {
return getDate(new Date(), format);
}
/**
* Returns current date string in given format
*
* @param date, date object
* @param defaultFormat, date format
* @return current date string (default timezone)
*/
public static String getDate(Date date, String defaultFormat) {
return createDate(date, defaultFormat, false);
}
/**
* Returns UTC date string in "yyyy-MM-dd HH:mm:ss" format.
*
* @return string, UTC Date
*/
public static String getUTCDate() {
return getUTCDate(new Date(), DEFAULT_FORMAT);
}
/**
* Return UTC date in given format
*
* @param format, date format
* @return UTC date string
*/
public static String getUTCDate(String format) {
return getUTCDate(new Date(), format);
}
/**
* Returns UTC Date string in given date format
*
* @param date, Date object
* @param defaultFormat, Date pattern format
* @return UTC date string
*/
public static String getUTCDate(Date date, String defaultFormat) {
return createDate(date, defaultFormat, true);
}
/**
* Convert UTC date to default timezone date
*
* @param date date in string
* @param dateFormat default date format
* @return string converted date string
*/
public static String convertToDefault(String date, String dateFormat) {
return convertToDefault(date, dateFormat, dateFormat);
}
/**
* Convert UTC date to default timezone
*
* @param date UTC date string
* @param dateFormat default date format
* @param toFormat converting date format
* @return string converted date string
*/
public static String convertToDefault(String date, String dateFormat, String toFormat) {
return createDate(createDateObject(date, dateFormat, false), toFormat, false);
}
/**
* Convert to UTC date
*
* @param date date in string
* @param dateFormat default date format
* @return string date string in UTC timezone
*/
public static String convertToUTC(String date, String dateFormat) {
return convertToUTC(date, dateFormat, dateFormat);
}
/**
* Convert default timezone date to UTC timezone
*
* @param date, date in string
* @param dateFormat default date format
* @param toFormat display format
* @return string, returns string converted to UTC
*/
public static String convertToUTC(String date, String dateFormat, String toFormat) {
return createDate(createDateObject(date, dateFormat, true), toFormat, true);
}
public static String parseDate(String date, String dateFormat, String toFormat) {
return createDate(createDateObject(date, dateFormat, false), toFormat, true);
}
/**
* Create Date instance from given date string.
*
* @param date date in string
* @param dateFormat, original date format
* @param hasDefaultTimezone if date is in default timezone than true, otherwise false
* @return Date, returns Date object with given date
*/
public static Date createDateObject(String date, String dateFormat, Boolean hasDefaultTimezone) {
Date dateObj = null;
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
if (!hasDefaultTimezone) {
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
}
dateObj = simpleDateFormat.parse(date);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return dateObj;
}
/**
* Returns date before given days
*
* @param days days to before
* @return string date string before days
*/
public static String getDateBefore(int days) {
Date today = new Date();
Calendar cal = new GregorianCalendar();
cal.setTime(today);
cal.add(Calendar.DAY_OF_MONTH, days * -1);
Date date = cal.getTime();
SimpleDateFormat gmtFormat = new SimpleDateFormat();
gmtFormat.applyPattern("yyyy-MM-dd 00:00:00");
TimeZone gmtTime = TimeZone.getTimeZone("GMT");
gmtFormat.setTimeZone(gmtTime);
return gmtFormat.format(date);
}
public static Date setDateTime(Date originalDate, int hour, int minute, int second) {
Calendar cal = new GregorianCalendar();
cal.setTime(originalDate);
cal.set(Calendar.HOUR, hour);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, second);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
public static String getDateDayBeforeAfterUTC(String utcDate, int days) {
Date dt = createDateObject(utcDate, DEFAULT_FORMAT, false);
Calendar cal = new GregorianCalendar();
cal.setTime(dt);
cal.add(Calendar.DAY_OF_MONTH, days);
return createDate(cal.getTime(), DEFAULT_FORMAT, true);
}
public static Date getDateDayBefore(Date originalDate, int days) {
Calendar cal = new GregorianCalendar();
cal.setTime(originalDate);
cal.add(Calendar.DAY_OF_MONTH, days * -1);
return cal.getTime();
}
public static String getCurrentDateWithHour(int addHour) {
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR);
cal.set(Calendar.HOUR, hour + addHour);
Date date = cal.getTime();
return ODateUtils.createDate(date, ODateUtils.DEFAULT_FORMAT, true);
}
public static Date getDateMinuteBefore(Date originalDate, int minutes) {
Calendar cal = new GregorianCalendar();
cal.setTime(originalDate);
cal.add(Calendar.MINUTE, minutes * -1);
return cal.getTime();
}
private static String createDate(Date date, String defaultFormat, Boolean utc) {
SimpleDateFormat gmtFormat = new SimpleDateFormat();
gmtFormat.applyPattern(defaultFormat);
TimeZone gmtTime = (utc) ? TimeZone.getTimeZone("GMT") : TimeZone.getDefault();
gmtFormat.setTimeZone(gmtTime);
return gmtFormat.format(date);
}
public static String floatToDuration(String duration_in_float) {
duration_in_float = String.format("%2.2f", Float.parseFloat(duration_in_float));
String[] parts = duration_in_float.split("\\.");
long minute = Long.parseLong(parts[0]);
long seconds = (60 * Long.parseLong(parts[1])) / 100;
return String.format("%02d:%02d", minute, seconds);
}
public static String durationToFloat(String duration) {
String[] parts = duration.split("\\:");
if (parts.length == 2) {
long minute = Long.parseLong(parts[0]);
long seconds = Long.parseLong(parts[1]);
if (seconds == 60) {
minute = minute + 1;
seconds = 0;
} else {
seconds = (100 * seconds) / 60;
}
return String.format("%d.%d", minute, seconds);
}
return "false";
}
public static String durationToFloat(long milliseconds) {
long minute = TimeUnit.MILLISECONDS.toMinutes(milliseconds);
long seconds = TimeUnit.MILLISECONDS.toSeconds(milliseconds) -
TimeUnit.MINUTES.toSeconds(minute);
if (seconds == 60) {
minute = minute + 1;
seconds = 0;
} else {
seconds = (100 * seconds) / 60;
}
return String.format("%d.%d", minute, seconds);
}
}