【问题标题】:find out the date for first Sunday/Monday etc of the month找出该月第一个星期日/星期一等的日期
【发布时间】:2014-02-11 11:18:34
【问题描述】:

我想在java中检测每个月第一周/第二周的第一个星期日/星期一的日期? 我怎样才能实现它?

我已经检查了 Java 中的 Calendar 类和 Date 类,但无法获得解决方案,所以请帮我解决这个问题。

【问题讨论】:

  • 试试我的答案,它会给你一年中每个月的第一个星期一
  • 您好 Vipul,您的代码运行良好。非常感谢您的帮助。但这只是给了我每月的第一个星期一。实际上我想要的是它应该在第一个星期一返回我相应的周/第二周/第三周。
  • 检查我编辑的答案。
  • 你好 Vipul,你的更新答案只给了我第一周的日期。我想要的是当月星期一的所有日期。例如它应该返回我 6,13,20,27 January 作为值。
  • 你想要所有星期一的所有日期??

标签: java android date datetime


【解决方案1】:
            Calendar calendar = Calendar.getInstance();               
            SimpleDateFormat sdf = new SimpleDateFormat("MMM/dd/YYYY");
            calendar.set(Calendar.MONTH,Calendar.JUNE);
            calendar.set(Calendar.DAY_OF_MONTH,1);          
            int day = (Calendar.TUESDAY-calendar.get(Calendar.DAY_OF_WEEK));            
            if(day<0){
              calendar.add(Calendar.DATE,7+(day));
            }else{
                calendar.add(Calendar.DATE,day);
            }
            System.out.println("First date is "+sdf.format(calendar.getTime()));`enter code here`

【讨论】:

    【解决方案2】:

    这将为您提供系统日期中每个月的第一个星期六...您还可以将星期六替换为任何其他日期

    由 HK2 和 Hemant 发明

    import java.util.Calendar;
    import java.util.GregorianCalendar
               class Demo{
                     SimpleDateFormat format =new SimpleDateFormat("dd-MMM-yyyy");
                    String DATE_FORMAT = "yyyy MM dd";
    
                    SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
                    Calendar c1 = Calendar.getInstance(); 
    
                    String y=sdf.format(c1.getTime());
                    String years=y.substring(0,4);
                    int year=Integer.parseInt(years);
    
                    Calendar cal = new GregorianCalendar(year, Calendar.JANUARY, 1);
                    for (int i = 0, inc = 1; i <366 && cal.get(Calendar.YEAR) == year; i+=inc) {
                        if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
    
                            String frm="";
                            frm=format.format(cal.getTime());
    
    
    
                             // System.out.println("the value of the saturday is "+format.format(cal.getTime()));
                              cal.add(Calendar.MONTH,1);
                              cal.set(Calendar.DAY_OF_MONTH, 1);
                        } 
    
                        else {
                            cal.add(Calendar.DAY_OF_MONTH, 1);
                             }
                    }
    }
    

    【讨论】:

      【解决方案3】:

      Java.time

      使用 Java 8 内置的 java.time 库:

      import java.time.{DayOfWeek, LocalDate}
      import java.time.temporal.TemporalAdjusters.firstInMonth
      
      val now = LocalDate.now() # 2015-11-23
      val firstMonday = now.`with`(firstInMonth(DayOfWeek.MONDAY)) # 2015-11-02 (Monday)
      

      您可以从java.time.DayOfWeek.{MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY} 中选择任何一天。

      如果您需要添加时间信息,您可以使用任何可用的LocalDateLocalDateTime 转换,如

      firstMonday.atStartOfDay() # 2015-11-02T00:00
      

      【讨论】:

        【解决方案4】:

        使用 Java 8 最简单的方法是:

        LocalDate firstSundayOfNextMonth = LocalDate
                      .now()
                      .with(firstDayOfNextMonth())
                      .with(nextOrSame(DayOfWeek.MONDAY));
        

        【讨论】:

        • OP 在 Android 上。因此,只有当 OP 愿意导入 Threeten-BP 或我的库 Time4A 等第 3 方库时,才能使用与您的答案类似的代码。
        【解决方案5】:

        您可以使用此处讨论的Calendar 类在 Java 中获取特定日期的星期几:

        How to determine day of week by passing specific date?

        然后,您可以遍历范围内的日期以查找星期日的第一个实例和星期一的第二个实例。

        【讨论】:

          【解决方案6】:
              Calendar calendar = Calendar.getInstance();
              calendar.set(year, month, date);
              int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
          

          所以它会给出一个月的第一个日期。从中你可以计算出你想要什么。

          【讨论】:

          • 为什么要使用 SimpleDateFormat.parse() 和一个字符串来表示所需的日期,而不是使用 Calendar.set() 来表示所需的年、月和日期?确定在代码中将数字数据表示为字符串会导致错误和错误?
          • 在使用 Calendar.set 时需要小心(我知道我建议这样做,但它带有警告)。月份从 0 开始计算,而不是 1。如果它是静态的,您可以使用 Calendar.JANUARY ... DECEMBER 来避免这种混乱。
          【解决方案7】:
          public static Calendar getFirstMonday(Date startDate) {
              Calendar c = Calendar.getInstance();
              c.setTime(startDate);
              int day = c.get(Calendar.DAY_OF_WEEK);
              while (day != 1) {
                  c.add(Calendar.DATE, 1);
                  day = c.get(Calendar.DAY_OF_WEEK);
              }
              return c;
          }
          

          查找所有星期中的第一个星期一:

                      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
          
              String strDate = "01/01/2014";
              Date date;
              try {
                  date = sdf.parse(strDate);
          
                  for (int i = 0; i < 52; i++) {
                      Calendar c = getFirstMonday(date);
                      System.out.println("monday: " + sdf.format(c.getTime()));
                      c.add(Calendar.DATE, 7);
                  }
              } catch (ParseException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
          

          【讨论】:

            猜你喜欢
            • 2021-12-09
            • 1970-01-01
            • 1970-01-01
            • 2011-12-05
            • 1970-01-01
            • 1970-01-01
            • 2021-09-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多