package com.ericliudeveloper.sharedbillhelper.util; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import com.ericliudeveloper.sharedbillhelper.R; import com.ericliudeveloper.sharedbillhelper.ui.dialog.DateWrongDialog; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; /** * Created by eric.liu on 9/06/15. */ public final class MyDateUtils { private static final String DATE_WRONG = "date wrong"; static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US); ; private MyDateUtils() { // to prevent this class to be instantiated } public static String getCurrentTimeString() { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.US); return dateFormat.format(new Date()); } public static void checkStartDateAfterEndDateAndShowDialog(String start, String end, Activity activity) { if (activity == null) { return; } if (!TextUtils.isEmpty(start) && !TextUtils.isEmpty(end)) { if (MyDateUtils.compareDates(start, end) < 0) { Bundle args = new Bundle(); args.putString(DateWrongDialog.TITLE, activity.getResources().getString(R.string.date_picking_mistake)); args.putString(DateWrongDialog.MESSAGE, activity.getResources().getString(R.string.start_date_must_be_before_end_date)); DateWrongDialog dateWrongdialog = DateWrongDialog.newInstance(args); dateWrongdialog.show(activity.getFragmentManager(), DATE_WRONG); } } } public static String getStringFromDate(Date date) { return dateFormat.format(date); } /** * calculate how many days this member should pay for this bill * @param memberStartString * @param memberEndtring * @param billStartString * @param billEndString * @return */ public static int calculateMemberPayingDays(String memberStartString, String memberEndtring, String billStartString, String billEndString) { int interval = 0; if (TextUtils.isEmpty(memberStartString)) { memberStartString = ResouceUtils.getAppResources().getString(R.string.a_century_ago); } if (TextUtils.isEmpty(billStartString)) { billStartString = ResouceUtils.getAppResources().getString(R.string.a_century_ago);; } if (TextUtils.isEmpty(memberEndtring)) { memberEndtring = ResouceUtils.getAppResources().getString(R.string.a_century_later); } if (TextUtils.isEmpty(billEndString)) { billEndString = ResouceUtils.getAppResources().getString(R.string.a_century_later); } try { java.util.Date memberStartDate = dateFormat .parse(memberStartString); java.util.Date memberEndDate = dateFormat.parse(memberEndtring); java.util.Date billStartDate = dateFormat.parse(billStartString); java.util.Date billEndDate = dateFormat.parse(billEndString); java.util.Date startDate = memberStartDate.after(billStartDate) ? memberStartDate : billStartDate; java.util.Date endDate = memberEndDate.before(billEndDate) ? memberEndDate : billEndDate; if (startDate.after(endDate)) { return -1; } interval = compareDates(startDate, endDate); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return interval; } public static String[] getPayeeStartEndDates(String memberStartString, String memberEndtring, String billStartString, String billEndString) { String[] startEndDates = new String[2]; if ((TextUtils.isEmpty(memberStartString) && (TextUtils.isEmpty(billStartString))) || (TextUtils.isEmpty(memberEndtring) && TextUtils.isEmpty(billEndString))) { return null; } if (TextUtils.isEmpty(memberStartString)) { memberStartString = ResouceUtils.getAppResources().getString(R.string.a_century_ago); } if (TextUtils.isEmpty(billStartString)) { billStartString = ResouceUtils.getAppResources().getString(R.string.a_century_ago);; } if (TextUtils.isEmpty(memberEndtring)) { memberEndtring = ResouceUtils.getAppResources().getString(R.string.a_century_later); } if (TextUtils.isEmpty(billEndString)) { billEndString = ResouceUtils.getAppResources().getString(R.string.a_century_later); } try { java.util.Date memberStartDate = dateFormat .parse(memberStartString); java.util.Date memberEndDate = dateFormat.parse(memberEndtring); java.util.Date billStartDate = dateFormat.parse(billStartString); java.util.Date billEndDate = dateFormat.parse(billEndString); java.util.Date startDate = memberStartDate.after(billStartDate) ? memberStartDate : billStartDate; java.util.Date endDate = memberEndDate.before(billEndDate) ? memberEndDate : billEndDate; if (startDate.after(endDate)) { return null; } startEndDates[0] = dateFormat.format(startDate); startEndDates[1] = dateFormat.format(endDate); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return startEndDates; } ; public static int compareDates(String startDateString, String endDateString) { int interval = 0; if (TextUtils.isEmpty(startDateString) || TextUtils.isEmpty(endDateString) ) { return -1; } try { java.util.Date startDate = dateFormat.parse(startDateString); java.util.Date endDate = dateFormat.parse(endDateString); if (startDate.after(endDate)) { return -1; } interval = compareDates(startDate, endDate); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return interval; } private static Calendar calendarStartDate = Calendar.getInstance(); private static Calendar calendarEndDate = Calendar.getInstance(); public static int compareDates(java.util.Date startDate, java.util.Date endDate) { int interval = 0; calendarStartDate = Calendar.getInstance(); calendarStartDate.set(Calendar.YEAR, startDate.getYear()); calendarStartDate.set(Calendar.MONTH, startDate.getMonth()); calendarStartDate.set(Calendar.DAY_OF_MONTH, startDate.getDate()); calendarEndDate.set(Calendar.YEAR, endDate.getYear()); calendarEndDate.set(Calendar.MONTH, endDate.getMonth()); calendarEndDate.set(Calendar.DAY_OF_MONTH, endDate.getDate()); long diff = calendarEndDate.getTimeInMillis() - calendarStartDate.getTimeInMillis(); interval = (int) (diff / (24 * 60 * 60 * 1000) + 1); // plus one day return interval; } }