【问题标题】:Get week start and end days from week number从周数获取周开始和结束天
【发布时间】:2020-10-01 01:34:34
【问题描述】:

我想获取给定周数的开始日期和结束日期。我尝试了以下代码,但它总是返回相同的日期(当前星期)

val c: Calendar = Calendar.getInstance()
val week = 39
 
c.set(Calendar.WEEK_OF_YEAR, week)
 
val firstDayOfWeek = c.firstDayOfWeek
c.set(Calendar.DAY_OF_WEEK,firstDayOfWeek)
startDate = SimpleDateFormat("yyyy-MM-dd",Locale.getDefault()).format(c.time).toString()
 
c.set(Calendar.DAY_OF_WEEK, firstDayOfWeek+6)
endDate = SimpleDateFormat("yyyy-MM-dd",Locale.getDefault()).format(c.time).toString()

【问题讨论】:

  • 我需要完整的日期。我试过用c.set(Calendar.DAY_OF_YEAR),但还是不行
  • 您不能只将 6 添加到星期几 - 它是从 1 到 7(星期一到星期日)的枚举 - 例如,如果一周的第一天是星期二,并且你加 7,你得到 9,这不是 DAY_OF_WEEK 的有效值。看看 DayOfWeek.plus()
  • @GreyBeardedGeek 我会更新它,但你知道它只给出当前星期日期的原因
  • 如果我更改 week 的值,您的代码对我来说可以正常工作(第 39 周对我来说是上周,使用默认区域设置)

标签: android kotlin


【解决方案1】:

我在使用它之前通过调用c.time 解决了这个问题。这是工作代码:

val c: Calendar = Calendar.getInstance()//Locale.getDefault())
val week = 39
c.set(Calendar.WEEK_OF_YEAR, week)
val t = c.time;
val firstDay = c.firstDayOfWeek
c.set(Calendar.DAY_OF_WEEK,firstDay)
startDate = SimpleDateFormat("yyyy-MM-dd",Locale.getDefault()).format(c.time).toString()
c.set(Calendar.DAY_OF_WEEK,firstDay+6)
endDate = SimpleDateFormat("yyyy-MM-dd",Locale.getDefault()).format(c.time).toString()

不明白为什么会这样,看了https://developer.android.com/reference/java/util/Calendar#field-manipulation之后试了一下

【讨论】:

    【解决方案2】:

    您一定是遗漏了什么或犯了一些基本错误。证明如下:

    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Locale;
    
    public class Main {
        public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
            int week = 39;
    
            Calendar c = Calendar.getInstance();
            c.set(Calendar.WEEK_OF_YEAR, week);
    
            int firstDayOfWeek = c.getFirstDayOfWeek();
    
            // Start date
            c.set(Calendar.DAY_OF_WEEK, firstDayOfWeek);
            String startDate = sdf.format(c.getTime());
            System.out.println(startDate);
    
            // End date
            c.set(Calendar.DAY_OF_WEEK, firstDayOfWeek + 6);
            String endDate = sdf.format(c.getTime());
            System.out.println(endDate);
        }
    }
    

    输出:

    2020-09-21
    2020-09-27
    

    注意:我不知道 Kotlin,但 AFAIK,你也可以在 Kotlin 中运行 Java 代码。如果你想坚持使用 Kotlin 语法,我希望你应该能够轻松地将其转换为 Kotlin 语法。

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多