Lines Matching defs:year
209 * and the number of days before that month in the same year. These
222 /* year -> 1 if leap year, else 0. */
224 is_leap(int year)
226 /* Cast year to unsigned. The result is the same either way, but
231 const unsigned int ayear = (unsigned int)year;
235 /* year, month -> number of days in that month in that year */
237 days_in_month(int year, int month)
241 if (month == 2 && is_leap(year))
247 /* year, month -> number of days in year preceding first day of month */
249 days_before_month(int year, int month)
256 if (month > 2 && is_leap(year))
261 /* year -> number of days before January 1st of year. Remember that we
262 * start with year 1, so days_before_year(1) == 0.
265 days_before_year(int year)
267 int y = year - 1;
268 /* This is incorrect if year <= 0; we really want the floor
269 * here. But so long as MINYEAR is 1, the smallest year this
272 assert (year >= 1);
276 /* Number of days in 4, 100, and 400 year cycles. That these have
283 /* ordinal -> year, month, day, considering 01-Jan-0001 as day 1. */
285 ord_to_ymd(int ordinal, int *year, int *month, int *day)
291 * to find the closest 400-year boundary at or before ordinal, then
294 * of ordinal at 400-year boundaries are exactly those divisible
300 * 1 Jan -399 -DI400Y +1 -DI400Y 400-year boundary
304 * 1 Jan 001 1 0 400-year boundary
309 * 1 Jan 401 DI400Y +1 DI400Y 400-year boundary
315 *year = n400 * 400 + 1;
318 * year, to the desired date. Now compute how many 100-year cycles
321 * 100-year cycles precede the desired day, which implies the
322 * desired day is December 31 at the end of a 400-year cycle.
327 /* Now compute how many 4-year cycles precede it. */
333 * 4-year cycle.
338 *year += n100 * 100 + n4 * 4 + n1;
341 *year -= 1;
347 /* Now the year is correct, and n is the offset from January 1. We
352 assert(leapyear == is_leap(*year));
358 preceding -= days_in_month(*year, *month);
362 assert(n < days_in_month(*year, *month));
367 /* year, month, day -> ordinal, considering 01-Jan-0001 as day 1. */
369 ymd_to_ord(int year, int month, int day)
371 return days_before_year(year) + days_before_month(year, month) + day;
376 weekday(int year, int month, int day)
378 return (ymd_to_ord(year, month, day) + 6) % 7;
381 /* Ordinal of the Monday starting week 1 of the ISO year. Week 1 is the
385 iso_week1_monday(int year)
387 int first_day = ymd_to_ord(year, 1, 1); /* ord of 1/1 */
400 int *year, int *month, int *day) {
426 ord_to_ymd(day_1 + day_offset, year, month, day);
453 check_date_args(int year, int month, int day)
456 if (year < MINYEAR || year > MAXYEAR) {
457 PyErr_Format(PyExc_ValueError, "year %i is out of range", year);
465 if (day < 1 || day > days_in_month(year, month)) {
575 /* Now only day can be out of bounds (year may also be out of bounds
629 * failure, where failure means the adjusted year is out of bounds.
632 normalize_date(int *year, int *month, int *day)
634 return normalize_y_m_d(year, month, day);
641 normalize_datetime(int *year, int *month, int *day,
649 return normalize_date(year, month, day);
737 parse_isoformat_date(const char *dtstr, const size_t len, int *year, int *month, int *day)
750 p = parse_digits(p, year, 4);
785 int rv = iso_to_ymd(*year, iso_week, iso_day, year, month, day);
945 new_date_ex(int year, int month, int day, PyTypeObject *type)
949 if (check_date_args(year, month, day) < 0) {
955 set_date_fields(self, year, month, day);
959 #define new_date(year, month, day) \
960 new_date_ex(year, month, day, &PyDateTime_DateType)
968 new_date_subclass_ex(int year, int month, int day, PyObject *cls)
973 result = new_date_ex(year, month, day, (PyTypeObject *)cls);
976 result = new_datetime_ex(year, month, day, 0, 0, 0, 0, Py_None,
980 result = PyObject_CallFunction(cls, "iii", year, month, day);
988 new_datetime_ex2(int year, int month, int day, int hour, int minute,
994 if (check_date_args(year, month, day) < 0) {
1007 set_date_fields((PyDateTime_Date *)self, year, month, day);
1022 new_datetime_ex(int year, int month, int day, int hour, int minute,
1025 return new_datetime_ex2(year, month, day, hour, minute, second, usecond,
1034 new_datetime_subclass_fold_ex(int year, int month, int day, int hour, int minute,
1040 dt = new_datetime(year, month, day, hour, minute, second, usecond,
1045 year,
1059 new_datetime_subclass_ex(int year, int month, int day, int hour, int minute,
1062 return new_datetime_subclass_fold_ex(year, month, day, hour, minute,
2875 {"year", (getter)date_year},
2883 static char *date_kws[] = {"year", "month", "day", NULL};
2903 int year;
2943 &year, &month, &day)) {
2944 self = new_date_ex(year, month, day, type);
3041 int year;
3049 ord_to_ymd(ordinal, &year, &month, &day);
3050 result = new_date_subclass_ex(year, month, day, cls);
3075 int year = 0, month = 0, day = 0;
3079 rv = parse_isoformat_date(dt_ptr, len, &year, &month, &day);
3089 return new_date_subclass_ex(year, month, day, cls);
3101 "year", "week", "day", NULL
3104 int year, week, day;
3107 &year, &week, &day) == 0) {
3116 // Year is bounded to 0 < year < 10000 because 9999-12-31 is (9999, 52, 5)
3117 if (year < MINYEAR || year > MAXYEAR) {
3118 PyErr_Format(PyExc_ValueError, "Year is out of range: %d", year);
3123 int rv = iso_to_ymd(year, week, day, &year, &month, &day);
3137 return new_date_subclass_ex(year, month, day, cls);
3152 int year = GET_YEAR(date);
3158 if (normalize_date(&year, &month, &day) >= 0)
3159 result = new_date_subclass_ex(year, month, day,
3304 ((year, week, weekday)\n\
3314 PyObject* year = PyTuple_GetItem((PyObject *)self, 0);
3315 if (year == NULL) {
3327 return PyUnicode_FromFormat("%.200s(year=%S, week=%S, weekday=%S)",
3328 Py_TYPE(self)->tp_name, year, week, weekday);
3348 PyObject *year = PyTuple_GetItem((PyObject *)self, 0);
3349 if (year == NULL) {
3352 Py_INCREF(year);
3353 return year;
3379 {"year", (getter)iso_calendar_date_year},
3407 year: int
3413 iso_calendar_date_new_impl(PyTypeObject *type, int year, int week,
3424 PyTuple_SET_ITEM(self, 0, PyLong_FromLong(year));
3434 int year = GET_YEAR(self);
3435 int week1_monday = iso_week1_monday(year);
3436 int today = ymd_to_ord(year, GET_MONTH(self), GET_DAY(self));
3442 --year;
3443 week1_monday = iso_week1_monday(year);
3446 else if (week >= 52 && today >= iso_week1_monday(year + 1)) {
3447 ++year;
3452 year, week + 1, day + 1);
3488 int year = GET_YEAR(self);
3493 &year, &month, &day))
3495 tuple = Py_BuildValue("iii", year, month, day);
3572 PyDoc_STR("int, int, int -> Construct a date from the ISO year, week "
3595 PyDoc_STR("Return a named tuple containing ISO year, week number, and "
3606 PyDoc_STR("Return proleptic Gregorian ordinal. January 1 of year "
3623 PyDoc_STR("date(year, month, day) --> date object");
4443 /* Python's strftime does insane things with the year part of the
4444 * timetuple. The year is forced to (the otherwise nonsensical)
4448 1900, 1, 1, /* year, month, day */
4821 /* Accessor properties. Properties for day, month, and year are inherited
4878 "year", "month", "day", "hour", "minute", "second",
4919 int year;
4969 &year, &month, &day, &hour, &minute,
4971 self = new_datetime_ex2(year, month, day,
4989 utc_to_seconds(int year, int month, int day,
4994 /* ymd_to_ord() doesn't support year <= 0 */
4995 if (year < MINYEAR || year > MAXYEAR) {
4996 PyErr_Format(PyExc_ValueError, "year %i is out of range", year);
5000 ordinal = ymd_to_ord(year, month, day);
5035 int year, month, day, hour, minute, second, fold = 0;
5040 year = tm.tm_year + 1900;
5072 result_seconds = utc_to_seconds(year, month, day,
5091 return new_datetime_subclass_fold_ex(year, month, day, hour, minute,
5468 int year = 0, month = 0, day = 0;
5473 int rv = parse_isoformat_date(p, separator_location, &year, &month, &day);
5508 PyObject *dt = new_datetime_subclass_ex(year, month, day, hour, minute,
5571 int year = GET_YEAR(date);
5581 if (normalize_datetime(&year, &month, &day,
5586 return new_datetime_subclass_ex(year, month, day,
6176 local_to_seconds(int year, int month, int day,
6328 local_to_seconds(int year, int month, int day,
6332 t = utc_to_seconds(year, month, day, hour, minute, second);
6556 PyDoc_STR("Return date object with same year, month and day.")},
6579 "sep is used to separate the year from the time, and "
6611 PyDoc_STR("datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])\n\
6613 The year, month and day arguments are required. tzinfo may be None, or an\n\
6862 /* A 4-year cycle has an extra leap day over what we'd get from
6868 /* Similarly, a 400-year cycle has an extra leap day over what we'd
6869 * get from pasting together 4 100-year cycles.
6874 /* OTOH, a 100-year cycle has one fewer leap day than we'd get from
6875 * pasting together 25 4-year cycles.
7115 doesn't matter if daylight time transition points change from year to year, or