Joda时间:一周的第一天?

sto*_*vik 56 java calendar jodatime weekday

如果使用Joda-Time获得Locale,您如何获得一周的第一天?

要点:大多数国家星期一使用国际标准作为星期的第一天(!).其他一些人使用星期天(特别是美国).其他人显然是星期六.有些人显然是星期三?!

维基百科"七天周"#Week_number

Jod*_*hen 45

Joda-Time使用ISO标准周一至周日周.

它无法获得一周的第一天,也无法根据标准星期一以外的任何一天返回星期几索引.最后,总是根据ISO规则计算周数.

  • 然后我不得不问 - 这不应该被视为Joda Time的明显缺陷吗?说真的,对于"打印的日历"(也就是你挂在厨房里的那些日历,你在飞行时间表 - 网络应用程序中选择的那些日历),当日历显示周日为一周的第一天时,我发现它非常烦人 - 我确实做到了因此而陷入困境.所以我认为,对于美国人来说,当他们被提交周日开始几周的日历时,它必须完全一样:一切都变得"提前一天",可以这么说 - 当看一周的第三个"盒子"时,一个美国人假设它是星期二. (23认同)
  • 因为@CristianVrabie,如果你必须找到给定日期的一周的第一天,它会更难以与图书馆合作.对于具有星期一的语言环境,您只需调用`LocalDate.now().withDayOfWeek(DateTimeConstants.MONDAY)`,但如果您确实需要星期日,这将无效.你必须检查它是否已经是星期天,如果没有,请去周日和一周后.太糟糕了.但请注意,Java的日历也很糟糕; 更糟糕的是,它让你相信它可以工作,而不是,请参阅http://stackoverflow.com/a/7499264/505775 (11认同)

Mar*_*ouf 14

没有理由你不能使用JDK至少找到给定Locale的"一周的习惯性开始".唯一棘手的部分是翻译工作日的常量,其中两者都是1到7,但是java.util.Calendar被移一,Calendar.MONDAY = 2而DateTimeConstants.MONDAY = 1.

无论如何,使用此功能:

/**
 * Gets the first day of the week, in the default locale.
 *
 * @return a value in the range of {@link DateTimeConstants#MONDAY} to
 *         {@link DateTimeConstants#SUNDAY}.
 */
private static final int getFirstDayOfWeek() {
  return ((Calendar.getInstance().getFirstDayOfWeek() + 5) % 7) + 1;
}
Run Code Online (Sandbox Code Playgroud)

将一个Locale添加到Calendar.getInstance()以获取除默认值之外的某些Locale的结果.


Cor*_*ein 5

以下是一个人如何解决Joda时间来获得美国本周的第一天:

DateTime getFirstDayOfWeek(DateTime other) {
  if(other.dayOfWeek.get == 7)
    return other;
  else
    return other.minusWeeks(1).withDayOfWeek(7);
}
Run Code Online (Sandbox Code Playgroud)

或者在斯卡拉

def getFirstDayOfWeek(other: DateTime) = other.dayOfWeek.get match {
    case 7 => other
    case _ => other.minusWeeks(1).withDayOfWeek(7)
}
Run Code Online (Sandbox Code Playgroud)