def test_from_utc_naive(self):
     """From UTC naive GregorianDateTime."""
     for (naive_grdt, grdt) in [
         (
             GregorianDateTime(1970, 1, 1, 0, 0, 0, None),
             GregorianDateTime(1970, 1, 1, 9, 0, 0, "+09:00"),
         ),
         (
             GregorianDateTime(1970, 1, 1, 0, 0, 0, None),
             GregorianDateTime(1970, 1, 1, 9, 0, 0, "Asia/Tokyo"),
         ),
         (
             GregorianDateTime(1970, 1, 1, 0, 0, 0, None),
             GregorianDateTime(1969, 12, 31, 15, 0, 0, "-09:00"),
         ),
     ]:
         with self.subTest(grdt=grdt):
             self.assertEqual(
                 grdt, GregorianDateTime.from_utc_naive(naive_grdt, grdt.timezone)
             )
     for (second, timezone) in [
         (second, timezone)
         for second in range(0, 60)
         for timezone in ["+00:00", "-00:00", "UTC"]
     ]:
         naive_grdt = GregorianDateTime(1970, 1, 1, 0, 0, second, None)
         grdt = GregorianDateTime(1970, 1, 1, 0, 0, second, timezone)
         with self.subTest(grdt=grdt):
             self.assertEqual(
                 grdt, GregorianDateTime.from_utc_naive(naive_grdt, timezone)
             )
def julian_day_to_gregorian_year(juld) -> float:
    """ユリウス通日をグレゴリオ年表示に變換する."""
    from imperial_calendar.GregorianDateTime import GregorianDateTime
    from imperial_calendar.transform.grdt_to_juld import grdt_to_juld
    from imperial_calendar.transform.juld_to_grdt import juld_to_grdt

    year = juld_to_grdt(juld).year
    january_1st = grdt_to_juld(GregorianDateTime(year, 1, 1, 0, 0, 0, None))
    next_january_1st = grdt_to_juld(GregorianDateTime(year + 1, 1, 1, 0, 0, 0, None))
    # 年内日數の小數表示
    annual_day = (juld.julian_day - january_1st.julian_day) / (
        next_january_1st.julian_day - january_1st.julian_day
    )
    return year + annual_day
Ejemplo n.º 3
0
def juld_to_grdt(juld: JulianDay) -> GregorianDateTime:
    """ユリウス通日をグレゴリオ曆の日時に變換する."""
    A = math.floor(juld.julian_day + 68569.5)
    B = juld.julian_day + 0.5
    a = math.floor(A / 36524.25)
    b = A - math.floor(36524.25 * a + 0.75)
    c = math.floor((b + 1) / 365.25025)
    d = b - math.floor(365.25 * c) + 31
    e = math.floor(d / 30.59)
    f = math.floor(e / 11.0)
    u = 100 * (a - 49) + c + f
    v = e - 12 * f + 2
    w = d - math.floor(30.59 * e) + (B % 1)
    (hour, minute) = divmod(round(juld.second), 60 * 60)
    hour = (hour + 12) % 24
    (minute, second) = divmod(minute, 60)
    return GregorianDateTime(u, v, math.floor(w), hour, minute, second, None)
Ejemplo n.º 4
0
 async def get_datetimes(self, params: dict) -> t.Dict[str, t.Any]:
     """Get datetimes."""
     response = await fetch("/api/datetimes?params={}".format(
         encodeURIComponent(JSON.stringify(params))))
     if not response.ok:
         raise Exception(f"{response.status}: {response.text()}")
     json = await response.json()
     grdt = GregorianDateTime(
         json["grdt"]["year"],
         json["grdt"]["month"],
         json["grdt"]["day"],
         json["grdt"]["hour"],
         json["grdt"]["minute"],
         json["grdt"]["second"],
         params["grdt_timezone"],
     )
     juld = JulianDay(json["juld"]["day"], json["juld"]["second"])
     tert = TerrestrialTime(json["tert"]["terrestrial_time"])
     mrsd = MarsSolDate(json["mrsd"]["mars_sol_date"])
     imsn = ImperialSolNumber(json["imsn"]["day"], json["imsn"]["second"])
     imdt = ImperialDateTime(
         json["imdt"]["year"],
         json["imdt"]["month"],
         json["imdt"]["day"],
         json["imdt"]["hour"],
         json["imdt"]["minute"],
         json["imdt"]["second"],
         params["imdt_timezone"],
     )
     return {
         "grdt": grdt,
         "juld": juld,
         "delta_t": json["delta_t"],
         "tert": tert,
         "mrls": json["mrls"],
         "mrsd": mrsd,
         "imsn": imsn,
         "imdt": imdt,
     }
Ejemplo n.º 5
0
def current_grdt() -> GregorianDateTime:
    """Get the current grdt on the Web browser."""
    now = __new__(Date)  # noqa
    offset = now.getTimezoneOffset()
    if offset <= 0:
        sign = "+"
    else:
        sign = "-"
    grdt_timezone = "{0}{1}:{2}".format(
        sign,
        "0{}".format(abs(offset) // 60)[-2:],
        "0{}".format(abs(offset) % 60)[-2:],
    )
    return GregorianDateTime(
        now.getFullYear(),
        now.getMonth() + 1,
        now.getDate(),
        now.getHours(),
        now.getMinutes(),
        now.getSeconds(),
        grdt_timezone,
    )
 def test_is_holiday(self):
     """祝日."""
     self.assertTrue(GregorianDateTime(2020, 1, 1, 0, 0, 0, "Asia/Tokyo").is_holiday)
     self.assertFalse(
         GregorianDateTime(2020, 1, 2, 0, 0, 0, "Asia/Tokyo").is_holiday
     )
     self.assertFalse(
         GregorianDateTime(2020, 2, 22, 0, 0, 0, "Asia/Tokyo").is_holiday
     )
     self.assertTrue(
         GregorianDateTime(2020, 2, 23, 0, 0, 0, "Asia/Tokyo").is_holiday
     )
     self.assertTrue(
         GregorianDateTime(2020, 2, 24, 0, 0, 0, "Asia/Tokyo").is_holiday
     )
     self.assertFalse(
         GregorianDateTime(2020, 2, 25, 0, 0, 0, "Asia/Tokyo").is_holiday
     )
Ejemplo n.º 7
0
ReactHelmet: t.Any = 0  # __:skip
ReactHookForm: t.Any = 0  # __:skip

__pragma__(  # noqa: F821
    "js",
    "{}",
    """
    const React = require("react");
    const ReactHelmet = require("react-helmet");
    const ReactHookForm = require("react-hook-form");
    window.process = {"env": {"NODE_ENV": "production"}}
    """,
)

INITIAL_DATETIME: t.Dict[str, t.Any] = {
    "grdt": GregorianDateTime(1970, 1, 1, 0, 0, 0, "+00:00"),
    "juld": JulianDay(2440587, 43200.0),
    "delta_t": 40.19294086136705,
    "tert": TerrestrialTime(2440587.500465196),
    "mrls": 295.3794638508962,
    "mrsd": MarsSolDate(34127.295516404454),
    "imsn": ImperialSolNumber(935321, 79532.61734358966),
    "imdt": ImperialDateTime(1398, 23, 12, 22, 5, 33, "+00:00"),
}


def set_grdt(form, grdt: GregorianDateTime):
    """Set a grdt to the form."""
    form.setValue("grdt.year", grdt.year)
    form.setValue("grdt.month", grdt.month)
    form.setValue("grdt.day", grdt.day)
 def test_weekday(self):
     """正しい曜日を取得する."""
     self.assertEqual(3, GregorianDateTime(2020, 1, 1, 0, 0, 0, "+09:00").weekday)
     self.assertEqual(4, GregorianDateTime(2020, 12, 31, 0, 0, 0, "+09:00").weekday)