Here you can find the source of getPreviousDay(long date, int startOfWeek)
date
that has the day of week matching startOfWeek
.
Parameter | Description |
---|---|
date | Base date |
startOfWeek | Calendar constant correspoding to start of week. |
public static long getPreviousDay(long date, int startOfWeek)
//package com.java2s; /*/* w ww . ja v a 2s .co m*/ * $Id: DateUtils.java,v 1.1 2004/08/12 00:24:33 dmouse Exp $ * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ import java.util.*; public class Main { private static Calendar CALENDAR = Calendar.getInstance(); /** * Returns the first day before <code>date</code> that has the * day of week matching <code>startOfWeek</code>. For example, if you * want to find the previous monday relative to <code>date</code> you * would call <code>getPreviousDay(date, Calendar.MONDAY)</code>. * * @param date Base date * @param startOfWeek Calendar constant correspoding to start of week. * @return start of week, return value will have 0 hours, 0 minutes, * 0 seconds and 0 ms. * */ public static long getPreviousDay(long date, int startOfWeek) { return getDay(date, startOfWeek, -1); } private static long getDay(long date, int startOfWeek, int increment) { Calendar calendar = CALENDAR; synchronized (calendar) { calendar.setTimeInMillis(date); int day = calendar.get(Calendar.DAY_OF_WEEK); // Normalize the view starting date to a week starting day while (day != startOfWeek) { calendar.add(Calendar.DATE, increment); day = calendar.get(Calendar.DAY_OF_WEEK); } return startOfDayInMillis(calendar.getTimeInMillis()); } } /** * Returns day in millis with the hours, milliseconds, seconds and minutes * set to 0. * * @param date long used in calculating start of day * @return Start of <code>date</code> */ public static long startOfDayInMillis(long date) { Calendar calendar = CALENDAR; synchronized (calendar) { calendar.setTimeInMillis(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); return calendar.getTimeInMillis(); } } }