Android当前周的开始和结束日期

时间:2011-10-12 15:33:52

标签: android calendar

我需要在Android中填写当周的开始和结束日。

实施例

today: Oct 12 2011 -> result: Oct 10 2011 - Oct 16 2011

today: Oct 1 2001 -> result: Sep 26 2011 - Oct 2 2011

today: Dec 30 2011 -> result: Dec 24 2001 - Jan 1 2011

使用c.get(Calendar.WEEK_OF_YEAR);我可以获得周数,但是如何获得开始&结束数据?我在这里找到了一个指向MonthDisplayHelper但是,如何使用它的答案?

谢谢!

7 个答案:

答案 0 :(得分:10)

使用此语法并且有效

    Calendar c1 = Calendar.getInstance();

    //first day of week
    c1.set(Calendar.DAY_OF_WEEK, 1);

    int year1 = c1.get(Calendar.YEAR);
    int month1 = c1.get(Calendar.MONTH)+1;
    int day1 = c1.get(Calendar.DAY_OF_MONTH);

    //last day of week
    c1.set(Calendar.DAY_OF_WEEK, 7);

    int year7 = c1.get(Calendar.YEAR);
    int month7 = c1.get(Calendar.MONTH)+1;
    int day7 = c1.get(Calendar.DAY_OF_MONTH);  

答案 1 :(得分:5)

这是一个很好的示例代码,它为您提供当年的当前周以及周开始和结束日期。您需要做的是在代码中设置一周的开始日期,在我的情况下我设置它作为SUNDAY,

// get Current Week of the year
    calendar=Calendar.getInstance();
    Log.v("Current Week", String.valueOf(calendar.get(Calendar.WEEK_OF_YEAR)));
    int current_week=calendar.get(Calendar.WEEK_OF_YEAR);
    int week_start_day=calendar.getFirstDayOfWeek(); // this will get the starting day os week in integer format i-e 1 if monday
    Toast.makeText(getContext(),"Current Week is"+current_week +"Start Day is"+week_start_day,Toast.LENGTH_SHORT).show();


    // get the starting and ending date
    // Set the calendar to sunday of the current week
    calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    System.out.println("Current week = " + Calendar.DAY_OF_WEEK);

    // Print dates of the current week starting on Sunday
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
    String startDate = "", endDate = "";

    startDate = df.format(calendar.getTime());
    calendar.add(Calendar.DATE, 6);
    endDate = df.format(calendar.getTime());

    System.out.println("Start Date = " + startDate);
    System.out.println("End Date = " + endDate);

答案 2 :(得分:2)

以下是您的好例子,因为它显示了您想要的正确日期:01 - 07 Jan 8 - 15 Jan ...等等...按下BackWard按钮&相对转发按钮。

p / s:请根据需要编辑日期格式。

public static String getLastWeek(Calendar mCalendar) {
        // Monday
        mCalendar.add(Calendar.DAY_OF_YEAR, -13);
        Date mDateMonday = mCalendar.getTime();

        // Sunday
        mCalendar.add(Calendar.DAY_OF_YEAR, 6);
        Date mDateSunday = mCalendar.getTime();

        // Date format
        String strDateFormat = "dd MMM";
        SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);

        String MONDAY = sdf.format(mDateMonday);
        String SUNDAY = sdf.format(mDateSunday);

        // Substring
        if ((MONDAY.substring(3, 6)).equals(SUNDAY.substring(3, 6))) {
            MONDAY = MONDAY.substring(0, 2);
        }

        return MONDAY + " - " + SUNDAY;
    }

public static String getCurrentWeek(Calendar mCalendar) {
        Date date = new Date();
        mCalendar.setTime(date);

        // 1 = Sunday, 2 = Monday, etc.
        int day_of_week = mCalendar.get(Calendar.DAY_OF_WEEK); 

        int monday_offset;
        if (day_of_week == 1) {
            monday_offset = -6;
        } else
            monday_offset = (2 - day_of_week); // need to minus back
        mCalendar.add(Calendar.DAY_OF_YEAR, monday_offset);

        Date mDateMonday = mCalendar.getTime();

        // return 6 the next days of current day (object cal save current day)
        mCalendar.add(Calendar.DAY_OF_YEAR, 6);
        Date mDateSunday = mCalendar.getTime();

        //Get format date
        String strDateFormat = "dd MMM";
        SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);

        String MONDAY = sdf.format(mDateMonday);
        String SUNDAY = sdf.format(mDateSunday);

        // Sub String
        if ((MONDAY.substring(3, 6)).equals(SUNDAY.substring(3, 6))) {
            MONDAY = MONDAY.substring(0, 2);
        }

        return MONDAY + " - " + SUNDAY;
    }

public static String getNextWeek(Calendar mCalendar) {
        // Monday
        mCalendar.add(Calendar.DAY_OF_YEAR, 1);
        Date mDateMonday = mCalendar.getTime();

        // Sunday
        mCalendar.add(Calendar.DAY_OF_YEAR, 6);
        Date Week_Sunday_Date = mCalendar.getTime();

        // Date format
        String strDateFormat = "dd MMM";
        SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);

        String MONDAY = sdf.format(mDateMonday);
        String SUNDAY = sdf.format(Week_Sunday_Date);

        // Sub string
        if ((MONDAY.substring(3, 6)).equals(SUNDAY.substring(3, 6))) {
            MONDAY = MONDAY.substring(0, 2);
        }

        return MONDAY + " - " + SUNDAY;
    }

答案 3 :(得分:2)

按照此代码,这将帮助您找到当前周的开始日期和最后日期。 它的工作在我身边。

Calendar calendar = Calendar.getInstance();

    Date date1 = calendar.getTime();
    SimpleDateFormat checkformate = new SimpleDateFormat("MM/yyyy");
    String currentCheckdate = checkformate.format(date1);

    int weekn = calendar.get(Calendar.WEEK_OF_MONTH);
    int month = calendar.get(Calendar.MONTH);
    int year = calendar.get(Calendar.YEAR);

    calendar.clear();
    calendar.setFirstDayOfWeek(Calendar.MONDAY);
    calendar.set(Calendar.WEEK_OF_MONTH, weekn);
    calendar.set(Calendar.MONTH, month);
    calendar.set(Calendar.YEAR, year);

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

    Date datef = calendar.getTime();
    Long time = calendar.getTimeInMillis() + 518400000L;
    Date dateL = new Date(time);
    String firtdate = simpleDateFormat.format(datef);
    String lastdate = simpleDateFormat.format(dateL);
    String firtdateCheck = checkformate.format(datef);
    String lastdateCheck = checkformate.format(dateL);


    if (!firtdateCheck.toString().equalsIgnoreCase(currentCheckdate)) {
    firtdate = calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH) + "-" + "1";
    }

    if (!lastdateCheck.toString().equalsIgnoreCase(currentCheckdate)) {

    int ma = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    lastdate = calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH) + "-" + String.valueOf(ma);
    }
    endDate = lastdate.toString();
    startDate = firtdate.toString();

答案 4 :(得分:0)

// <Pre  Current Week Next>
// Week : MONDAY to SUNDAY
// Week : SUNDAY to SATURDAY  

    public class TimeSheetCalender {
    
        public static String DATE_FORMAT_PATTERN = "yyyy-MM-dd";
        public static String DATE_PATTERN = "yyyy-MM-dd";
        public static String DATE_FULL_PATTERN = "MM dd, YYYY";
    
        public static ArrayList<Date> getLastWeek(Calendar mCalendar) {
            // Monday
            mCalendar.add(Calendar.DAY_OF_YEAR, -13);
            Date mDateMonday = mCalendar.getTime();
    
            // Sunday
            mCalendar.add(Calendar.DAY_OF_YEAR, 6);
            Date mDateSunday = mCalendar.getTime();
    
            // Date format
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PATTERN, Locale.US);
    
            String MONDAY = sdf.format(mDateMonday);
            String SUNDAY = sdf.format(mDateSunday);
    
            ArrayList<Date> dateList = getDates(MONDAY, SUNDAY);
            //return MONDAY + " - " + SUNDAY;
            return dateList;
        }
    
        //MONDAY - SUNDAY
        public static ArrayList<Date> getCurrentWeek(Calendar mCalendar) {
            Date date = new Date();
            mCalendar.setTime(date);
            // 1 = Sunday, 2 = Monday, etc.
            int day_of_week = mCalendar.get(Calendar.DAY_OF_WEEK);
    
            int monday_offset;
            if (day_of_week == 1) {
                monday_offset = -6;
            } else
                monday_offset = (2 - day_of_week); // need to minus back
            mCalendar.add(Calendar.DAY_OF_YEAR, monday_offset);
    
            Date mDateMonday = mCalendar.getTime();
    
            // return 6 the next days of current day (object cal save current day)
            mCalendar.add(Calendar.DAY_OF_YEAR, 6);
            Date mDateSunday = mCalendar.getTime();
    
            //Get format date
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PATTERN, Locale.US);
    
            String MONDAY = sdf.format(mDateMonday);
            String SUNDAY = sdf.format(mDateSunday);
    
            Common.logData("TimeSheetCalender", "Date: " + MONDAY);
    
            ArrayList<Date> dateList = getDates(MONDAY, SUNDAY);
            //return MONDAY + " - " + SUNDAY;
            return dateList;
        }
    
        //SUNDAY - SATURDAY
        public static ArrayList<Date> getCurrentWeek_(Calendar mCalendar) {
            // Set the calendar to sunday of the current week
            mCalendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PATTERN, Locale.US);
            String startDate = "", endDate = "";
    
            startDate = sdf.format(mCalendar.getTime());
            mCalendar.add(Calendar.DATE, 6);
            endDate = sdf.format(mCalendar.getTime());
    
            System.out.println("Start Date = " + startDate);
            System.out.println("End Date = " + endDate);
    
            ArrayList<Date> dateList = getDates(startDate, endDate);
    
            return dateList;
        }
    
        public static ArrayList<Date> getNextWeek(Calendar mCalendar) {
            // Monday
            mCalendar.add(Calendar.DAY_OF_YEAR, 1);
            Date mDateMonday = mCalendar.getTime();
    
            // Sunday
            mCalendar.add(Calendar.DAY_OF_YEAR, 6);
            Date Week_Sunday_Date = mCalendar.getTime();
    
            // Date format
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PATTERN, Locale.US);
    
            String MONDAY = sdf.format(mDateMonday);
            String SUNDAY = sdf.format(Week_Sunday_Date);
    
            ArrayList<Date> dateList = getDates(MONDAY, SUNDAY);
            //return MONDAY + " - " + SUNDAY;
            return dateList;
        }
    
        private static ArrayList<Date> getDates(String dateString1, String dateString2) {
            ArrayList<Date> dates = new ArrayList<Date>();
            DateFormat df1 = new SimpleDateFormat(DATE_FORMAT_PATTERN, Locale.US);
    
            Date date1 = null;
            Date date2 = null;
    
            try {
                date1 = df1.parse(dateString1);
                date2 = df1.parse(dateString2);
            } catch (ParseException e) {
                e.printStackTrace();
            }
    
            Calendar cal1 = Calendar.getInstance(Locale.US);
            cal1.setTime(date1);
    
            Calendar cal2 = Calendar.getInstance(Locale.US);
            cal2.setTime(date2);
    
            while (!cal1.after(cal2)) {
                dates.add(cal1.getTime());
                cal1.add(Calendar.DATE, 1);
    
                Common.logData("TimeSheetCalender", "Date: " + cal1.getTime());
            }
            return dates;
        }
    }

答案 5 :(得分:0)

这是 Kotlin 版本:

val calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
calendar.time = Date()
calendar.firstDayOfWeek = Calendar.MONDAY // Set the starting day of the week
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY) // Pass whatever day you want to get inplace of `MONDAY`
val startDate = calendar.time
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY)
val endDate = calendar.time

答案 6 :(得分:0)

这是为 kotlin 爱好者准备的!

                var startLocalDate = LocalDate.now()
                var endLocalDate = LocalDate.now()

                // Go backward to get Monday
                while (startLocalDate.dayOfWeek != DayOfWeek.MONDAY) {
                    startLocalDate = startLocalDate.minusDays(1)
                }

                // Go forward to get Sunday
                while (endLocalDate.dayOfWeek != DayOfWeek.SUNDAY) {
                    endLocalDate = endLocalDate.plusDays(1)
                }
相关问题