سؤال

كيف تحصل على اليوم الأول من الأسبوع نظرا الإعدادات المحلية باستخدام Joda الوقت?

نقطة:معظم البلدان استخدام المعيار الدولي يوم الاثنين أول يوم من الأسبوع (!).حفنة استخدام الآخرين الأحد (ولا سيما الولايات المتحدة الأمريكية).الآخرين على ما يبدو السبت.بعض على ما يبدو يوم الأربعاء؟!

ويكيبيديا "سبعة أيام في الأسبوع"#Week_number

هل كانت مفيدة؟

المحلول

وJoda وقت يستخدم معيار الاثنين إلى الأحد الأسبوع ISO.

وليس لديها القدرة على الحصول على اليوم الأول من الأسبوع، ولا للعودة يوم المؤشر الأسبوع على أساس أي يوم آخر من مستوى الاثنين. وأخيرا، أسابيع تحسب دائما قواعد ISO بخصوص.

نصائح أخرى

وليس هناك سبب لا يمكنك الاستفادة من JDK على الأقل للعثور على "بداية العرفي الأسبوع" للغة معينة. الجزء صعبة الوحيد هو ترجمة الثوابت لأيام الأسبوع، حيث يعاني كلاهما من 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;
}

وإضافة اللغة إلى Calendar.getInstance () للحصول على نتيجة لبعض لغة أخرى غير الافتراضي.

وهنا هو كيف يمكن للمرء أن تغلب على الوقت Joda للحصول على اليوم الأول من الولايات المتحدة الأسبوع:

DateTime getFirstDayOfWeek(DateTime other) {
  if(other.dayOfWeek.get == 7)
    return other;
  else
    return other.minusWeeks(1).withDayOfWeek(7);
}

وأو في سكالا

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

ويبدو أن كنت خارجا من الحظ، يبدو أن كل من التسلسل الزمني المنصوص ترث تنفيذ من baseChronology، التي تدعم تعريفات ISO فقط، أي الاثنين = 1 ... الأحد = 7.

وسيكون لديك لتحديد LocaleChronology الخاصة بك، وربما على غرار StrictChronology أو LenientChronology، إضافة أسلوب المصنع:

public static LocaleChronology getInstance(Chronology base, Locale locale)

ووتجاوز تنفيذ

public final DateTimeField dayOfWeek()

ومع إعادة تنفيذ java.util.Calendar.setWeekCountData (لغة desiredLocale) الذي يعتمد على sun.util.resources.LocaleData..getCalendarData (desiredLocale).

وهكذا سؤالك، وكيفية الحصول على DAYOFWEEK من كائن Joda التاريخ والوقت؟ ماذا عن هذا:

DateTime dt = new DateTime().withYear(2009).plusDays(111);
dt.toGregorianCalendar().getFirstDayOfWeek();

لقد استعملت ما يلي كعب في Scala الحصول على أول وآخر يوم من أيام الأسبوع من Joda DateTime

val today: DateTime = new DateTime()
val dayOfWeek: DateTime.Property = today.dayOfWeek()

val firstDayOfWeek: DateTime = dayOfWeek.withMinimumValue().minusDays(1)
val lastDayOfWeek: DateTime = dayOfWeek.withMaximumValue().minusDays(1)

ملاحظة:على minusDays(1) المقصود فقط هو جعل في الأسبوع تمتد من الأحد إلى السبت (بدلا من الافتراضي من الاثنين إلى الأحد من المعروف أن Joda).بالنسبة لنا (وما شابهها) لغات, يمكنك تجاهل هذا الجزء

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top