DATETIME

Constant DATETIME 

Source
pub const DATETIME: &str = "// stdlib/datetime.aether\n// Aether \u{65e5}\u{671f}\u{65f6}\u{95f4}\u{5de5}\u{5177}\u{5e93}\n// \u{63d0}\u{4f9b}\u{65e5}\u{671f}\u{65f6}\u{95f4}\u{5904}\u{7406}\u{529f}\u{80fd}\n\n// ==================== \u{5e38}\u{91cf}\u{5b9a}\u{4e49} ====================\n\nSet DAYS_IN_MONTH [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nSet MONTH_NAMES [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\nSet MONTH_NAMES_CN [\"\u{4e00}\u{6708}\", \"\u{4e8c}\u{6708}\", \"\u{4e09}\u{6708}\", \"\u{56db}\u{6708}\", \"\u{4e94}\u{6708}\", \"\u{516d}\u{6708}\", \"\u{4e03}\u{6708}\", \"\u{516b}\u{6708}\", \"\u{4e5d}\u{6708}\", \"\u{5341}\u{6708}\", \"\u{5341}\u{4e00}\u{6708}\", \"\u{5341}\u{4e8c}\u{6708}\"]\nSet WEEKDAY_NAMES [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\nSet WEEKDAY_NAMES_CN [\"\u{661f}\u{671f}\u{65e5}\", \"\u{661f}\u{671f}\u{4e00}\", \"\u{661f}\u{671f}\u{4e8c}\", \"\u{661f}\u{671f}\u{4e09}\", \"\u{661f}\u{671f}\u{56db}\", \"\u{661f}\u{671f}\u{4e94}\", \"\u{661f}\u{671f}\u{516d}\"]\n\n// ==================== \u{95f0}\u{5e74}\u{5224}\u{65ad} ====================\n\n// \u{5224}\u{65ad}\u{662f}\u{5426}\u{4e3a}\u{95f0}\u{5e74}\nFunc DT_IS_LEAP_YEAR(YEAR) {\n    // \u{80fd}\u{88ab}4\u{6574}\u{9664}\u{4f46}\u{4e0d}\u{80fd}\u{88ab}100\u{6574}\u{9664}\u{ff0c}\u{6216}\u{8005}\u{80fd}\u{88ab}400\u{6574}\u{9664}\n    Set DIV_4 ((YEAR % 4) == 0)\n    Set DIV_100 ((YEAR % 100) == 0)\n    Set DIV_400 ((YEAR % 400) == 0)\n    \n    Return ((DIV_4 && !DIV_100) || DIV_400)\n}\n\n// ==================== \u{5929}\u{6570}\u{8ba1}\u{7b97} ====================\n\n// \u{83b7}\u{53d6}\u{6307}\u{5b9a}\u{6708}\u{4efd}\u{7684}\u{5929}\u{6570}\nFunc DT_DAYS_IN_MONTH(YEAR, MONTH) {\n    If (MONTH < 1 || MONTH > 12) {\n        Return 0\n    }\n    \n    If (MONTH == 2) {\n        Set IS_LEAP DT_IS_LEAP_YEAR(YEAR)\n        If (IS_LEAP) {\n            Return 29\n        } Else {\n            Return 28\n        }\n    }\n    \n    Return DAYS_IN_MONTH[MONTH - 1]\n}\n\n// \u{8ba1}\u{7b97}\u{67d0}\u{5e74}\u{67d0}\u{6708}\u{67d0}\u{65e5}\u{662f}\u{5f53}\u{5e74}\u{7684}\u{7b2c}\u{51e0}\u{5929}\nFunc DT_DAY_OF_YEAR(YEAR, MONTH, DAY) {\n    Set TOTAL 0\n    Set M 1\n    \n    While (M < MONTH) {\n        Set DAYS DT_DAYS_IN_MONTH(YEAR, M)\n        Set TOTAL (TOTAL + DAYS)\n        Set M (M + 1)\n    }\n    \n    Set TOTAL (TOTAL + DAY)\n    Return TOTAL\n}\n\n// \u{8ba1}\u{7b97}\u{4e00}\u{5e74}\u{6709}\u{591a}\u{5c11}\u{5929}\nFunc DT_DAYS_IN_YEAR(YEAR) {\n    Set IS_LEAP DT_IS_LEAP_YEAR(YEAR)\n    If (IS_LEAP) {\n        Return 366\n    } Else {\n        Return 365\n    }\n}\n\n// ==================== \u{65e5}\u{671f}\u{9a8c}\u{8bc1} ====================\n\n// \u{9a8c}\u{8bc1}\u{65e5}\u{671f}\u{662f}\u{5426}\u{5408}\u{6cd5}\nFunc DT_IS_VALID_DATE(YEAR, MONTH, DAY) {\n    If (YEAR < 1 || YEAR > 9999) {\n        Return False\n    }\n    \n    If (MONTH < 1 || MONTH > 12) {\n        Return False\n    }\n    \n    Set MAX_DAYS DT_DAYS_IN_MONTH(YEAR, MONTH)\n    If (DAY < 1 || DAY > MAX_DAYS) {\n        Return False\n    }\n    \n    Return True\n}\n\n// \u{9a8c}\u{8bc1}\u{65f6}\u{95f4}\u{662f}\u{5426}\u{5408}\u{6cd5}\nFunc DT_IS_VALID_TIME(HOUR, MINUTE, SECOND) {\n    If (HOUR < 0 || HOUR > 23) {\n        Return False\n    }\n    \n    If (MINUTE < 0 || MINUTE > 59) {\n        Return False\n    }\n    \n    If (SECOND < 0 || SECOND > 59) {\n        Return False\n    }\n    \n    Return True\n}\n\n// ==================== \u{65e5}\u{671f}\u{6bd4}\u{8f83} ====================\n\n// \u{6bd4}\u{8f83}\u{4e24}\u{4e2a}\u{65e5}\u{671f}\u{ff08}\u{8fd4}\u{56de} -1: \u{65e5}\u{671f}1\u{65e9}, 0: \u{76f8}\u{7b49}, 1: \u{65e5}\u{671f}1\u{665a}\u{ff09}\nFunc DT_COMPARE_DATE(YEAR1, MONTH1, DAY1, YEAR2, MONTH2, DAY2) {\n    If (YEAR1 < YEAR2) {\n        Return -1\n    } Elif (YEAR1 > YEAR2) {\n        Return 1\n    }\n    \n    If (MONTH1 < MONTH2) {\n        Return -1\n    } Elif (MONTH1 > MONTH2) {\n        Return 1\n    }\n    \n    If (DAY1 < DAY2) {\n        Return -1\n    } Elif (DAY1 > DAY2) {\n        Return 1\n    }\n    \n    Return 0\n}\n\n// ==================== \u{65e5}\u{671f}\u{5dee}\u{503c}\u{8ba1}\u{7b97} ====================\n\n// \u{8ba1}\u{7b97}\u{4e24}\u{4e2a}\u{65e5}\u{671f}\u{4e4b}\u{95f4}\u{7684}\u{5929}\u{6570}\u{5dee}\u{ff08}\u{7b80}\u{5316}\u{7248}\u{672c}\u{ff0c}\u{5047}\u{8bbe} date1 <= date2\u{ff09}\nFunc DT_DAYS_BETWEEN(YEAR1, MONTH1, DAY1, YEAR2, MONTH2, DAY2) {\n    // \u{5982}\u{679c}\u{662f}\u{540c}\u{4e00}\u{5929}\n    If (YEAR1 == YEAR2 && MONTH1 == MONTH2 && DAY1 == DAY2) {\n        Return 0\n    }\n    \n    Set TOTAL_DAYS 0\n    \n    // \u{5982}\u{679c}\u{662f}\u{540c}\u{4e00}\u{5e74}\n    If (YEAR1 == YEAR2) {\n        Set DAY_OF_YEAR1 DT_DAY_OF_YEAR(YEAR1, MONTH1, DAY1)\n        Set DAY_OF_YEAR2 DT_DAY_OF_YEAR(YEAR2, MONTH2, DAY2)\n        Return (DAY_OF_YEAR2 - DAY_OF_YEAR1)\n    }\n    \n    // \u{8ba1}\u{7b97}\u{7b2c}\u{4e00}\u{5e74}\u{5269}\u{4f59}\u{7684}\u{5929}\u{6570}\n    Set DAYS_IN_YEAR1 DT_DAYS_IN_YEAR(YEAR1)\n    Set DAY_OF_YEAR1 DT_DAY_OF_YEAR(YEAR1, MONTH1, DAY1)\n    Set TOTAL_DAYS (DAYS_IN_YEAR1 - DAY_OF_YEAR1)\n    \n    // \u{8ba1}\u{7b97}\u{4e2d}\u{95f4}\u{5b8c}\u{6574}\u{5e74}\u{4efd}\u{7684}\u{5929}\u{6570}\n    Set Y (YEAR1 + 1)\n    While (Y < YEAR2) {\n        Set DAYS_IN_Y DT_DAYS_IN_YEAR(Y)\n        Set TOTAL_DAYS (TOTAL_DAYS + DAYS_IN_Y)\n        Set Y (Y + 1)\n    }\n    \n    // \u{8ba1}\u{7b97}\u{6700}\u{540e}\u{4e00}\u{5e74}\u{7684}\u{5929}\u{6570}\n    Set DAY_OF_YEAR2 DT_DAY_OF_YEAR(YEAR2, MONTH2, DAY2)\n    Set TOTAL_DAYS (TOTAL_DAYS + DAY_OF_YEAR2)\n    \n    Return TOTAL_DAYS\n}\n\n// ==================== \u{65e5}\u{671f}\u{683c}\u{5f0f}\u{5316} ====================\n\n// \u{5c06}\u{6570}\u{5b57}\u{8865}\u{96f6}\u{5230}\u{4e24}\u{4f4d}\nFunc DT_PAD_TWO(NUM) {\n    If (NUM < 10) {\n        Return (\"0\" + TO_STRING(NUM))\n    }\n    Return TO_STRING(NUM)\n}\n\n// \u{5c06}\u{6570}\u{5b57}\u{8865}\u{96f6}\u{5230}\u{56db}\u{4f4d}\nFunc DT_PAD_FOUR(NUM) {\n    If (NUM < 10) {\n        Return (\"000\" + TO_STRING(NUM))\n    } Elif (NUM < 100) {\n        Return (\"00\" + TO_STRING(NUM))\n    } Elif (NUM < 1000) {\n        Return (\"0\" + TO_STRING(NUM))\n    }\n    Return TO_STRING(NUM)\n}\n\n// \u{683c}\u{5f0f}\u{5316}\u{65e5}\u{671f}\u{4e3a} YYYY-MM-DD\nFunc DT_FORMAT_DATE(YEAR, MONTH, DAY) {\n    Set YEAR_STR DT_PAD_FOUR(YEAR)\n    Set MONTH_STR DT_PAD_TWO(MONTH)\n    Set DAY_STR DT_PAD_TWO(DAY)\n    \n    Return (YEAR_STR + \"-\" + MONTH_STR + \"-\" + DAY_STR)\n}\n\n// \u{683c}\u{5f0f}\u{5316}\u{65f6}\u{95f4}\u{4e3a} HH:MM:SS\nFunc DT_FORMAT_TIME(HOUR, MINUTE, SECOND) {\n    Set HOUR_STR DT_PAD_TWO(HOUR)\n    Set MINUTE_STR DT_PAD_TWO(MINUTE)\n    Set SECOND_STR DT_PAD_TWO(SECOND)\n    \n    Return (HOUR_STR + \":\" + MINUTE_STR + \":\" + SECOND_STR)\n}\n\n// \u{683c}\u{5f0f}\u{5316}\u{65e5}\u{671f}\u{65f6}\u{95f4}\u{4e3a} YYYY-MM-DD HH:MM:SS\nFunc DT_FORMAT_DATETIME(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND) {\n    Set DATE_STR DT_FORMAT_DATE(YEAR, MONTH, DAY)\n    Set TIME_STR DT_FORMAT_TIME(HOUR, MINUTE, SECOND)\n    \n    Return (DATE_STR + \" \" + TIME_STR)\n}\n\n// ==================== \u{65e5}\u{671f}\u{89e3}\u{6790} ====================\n\n// \u{4ece} YYYY-MM-DD \u{683c}\u{5f0f}\u{5b57}\u{7b26}\u{4e32}\u{89e3}\u{6790}\u{5e74}\u{4efd}\nFunc DT_PARSE_YEAR(DATE_STR) {\n    If (STRLEN(DATE_STR) < 10) {\n        Return 0\n    }\n    \n    Set YEAR_STR STRSLICE(DATE_STR, 0, 4)\n    // \u{7b80}\u{5316}\u{ff1a}\u{5047}\u{8bbe}\u{5b57}\u{7b26}\u{4e32}\u{683c}\u{5f0f}\u{6b63}\u{786e}\u{ff0c}\u{76f4}\u{63a5}\u{8f6c}\u{6362}\n    // \u{5b9e}\u{9645}\u{5e94}\u{8be5}\u{5b9e}\u{73b0}\u{5b57}\u{7b26}\u{4e32}\u{8f6c}\u{6570}\u{5b57}\u{51fd}\u{6570}\n    Return YEAR_STR\n}\n\n// \u{4ece} YYYY-MM-DD \u{683c}\u{5f0f}\u{5b57}\u{7b26}\u{4e32}\u{89e3}\u{6790}\u{6708}\u{4efd}\nFunc DT_PARSE_MONTH(DATE_STR) {\n    If (STRLEN(DATE_STR) < 10) {\n        Return 0\n    }\n    \n    Set MONTH_STR STRSLICE(DATE_STR, 5, 7)\n    Return MONTH_STR\n}\n\n// \u{4ece} YYYY-MM-DD \u{683c}\u{5f0f}\u{5b57}\u{7b26}\u{4e32}\u{89e3}\u{6790}\u{65e5}\u{671f}\nFunc DT_PARSE_DAY(DATE_STR) {\n    If (STRLEN(DATE_STR) < 10) {\n        Return 0\n    }\n    \n    Set DAY_STR STRSLICE(DATE_STR, 8, 10)\n    Return DAY_STR\n}\n\n// ==================== \u{6708}\u{4efd}\u{540d}\u{79f0} ====================\n\n// \u{83b7}\u{53d6}\u{6708}\u{4efd}\u{82f1}\u{6587}\u{540d}\u{79f0}\nFunc DT_MONTH_NAME(MONTH) {\n    If (MONTH < 1 || MONTH > 12) {\n        Return \"\"\n    }\n    \n    Return MONTH_NAMES[MONTH - 1]\n}\n\n// \u{83b7}\u{53d6}\u{6708}\u{4efd}\u{4e2d}\u{6587}\u{540d}\u{79f0}\nFunc DT_MONTH_NAME_CN(MONTH) {\n    If (MONTH < 1 || MONTH > 12) {\n        Return \"\"\n    }\n    \n    Return MONTH_NAMES_CN[MONTH - 1]\n}\n\n// ==================== \u{661f}\u{671f}\u{8ba1}\u{7b97} ====================\n\n// \u{4f7f}\u{7528} Zeller \u{516c}\u{5f0f}\u{8ba1}\u{7b97}\u{661f}\u{671f}\u{51e0}\u{ff08}0=\u{5468}\u{65e5}, 1=\u{5468}\u{4e00}, ..., 6=\u{5468}\u{516d}\u{ff09}\nFunc DT_DAY_OF_WEEK(YEAR, MONTH, DAY) {\n    // Zeller \u{516c}\u{5f0f}\u{ff1a}w = (d + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400 + 1) % 7\n    // \u{9700}\u{8981}\u{5c06}1\u{6708}\u{548c}2\u{6708}\u{770b}\u{4f5c}\u{4e0a}\u{4e00}\u{5e74}\u{7684}13\u{6708}\u{548c}14\u{6708}\n    \n    Set Y YEAR\n    Set M MONTH\n    \n    If (M == 1 || M == 2) {\n        Set M (M + 12)\n        Set Y (Y - 1)\n    }\n    \n    Set C (Y / 100)\n    Set Y_CENTURY (Y % 100)\n    \n    Set W (DAY + (2 * M) + (3 * (M + 1) / 5) + Y_CENTURY + (Y_CENTURY / 4) - (C * 2) + (C / 4))\n    Set W ((W % 7 + 7) % 7)\n    \n    Return W\n}\n\n// \u{83b7}\u{53d6}\u{661f}\u{671f}\u{51e0}\u{7684}\u{82f1}\u{6587}\u{540d}\u{79f0}\nFunc DT_WEEKDAY_NAME(YEAR, MONTH, DAY) {\n    Set DAY_NUM DT_DAY_OF_WEEK(YEAR, MONTH, DAY)\n    Return WEEKDAY_NAMES[DAY_NUM]\n}\n\n// \u{83b7}\u{53d6}\u{661f}\u{671f}\u{51e0}\u{7684}\u{4e2d}\u{6587}\u{540d}\u{79f0}\nFunc DT_WEEKDAY_NAME_CN(YEAR, MONTH, DAY) {\n    Set DAY_NUM DT_DAY_OF_WEEK(YEAR, MONTH, DAY)\n    Return WEEKDAY_NAMES_CN[DAY_NUM]\n}\n\n// ==================== \u{65e5}\u{671f}\u{52a0}\u{51cf} ====================\n\n// \u{7ed9}\u{65e5}\u{671f}\u{52a0}\u{4e0a}\u{6307}\u{5b9a}\u{5929}\u{6570}\u{ff08}\u{7b80}\u{5316}\u{7248}\u{672c}\u{ff09}\nFunc DT_ADD_DAYS(YEAR, MONTH, DAY, DAYS_TO_ADD) {\n    Set RESULT_YEAR YEAR\n    Set RESULT_MONTH MONTH\n    Set RESULT_DAY (DAY + DAYS_TO_ADD)\n    \n    // \u{5904}\u{7406}\u{65e5}\u{671f}\u{6ea2}\u{51fa}\n    While (True) {\n        Set MAX_DAYS DT_DAYS_IN_MONTH(RESULT_YEAR, RESULT_MONTH)\n        \n        If (RESULT_DAY <= MAX_DAYS) {\n            Break\n        }\n        \n        Set RESULT_DAY (RESULT_DAY - MAX_DAYS)\n        Set RESULT_MONTH (RESULT_MONTH + 1)\n        \n        If (RESULT_MONTH > 12) {\n            Set RESULT_MONTH 1\n            Set RESULT_YEAR (RESULT_YEAR + 1)\n        }\n    }\n    \n    Set RESULT []\n    Set RESULT PUSH(RESULT, RESULT_YEAR)\n    Set RESULT PUSH(RESULT, RESULT_MONTH)\n    Set RESULT PUSH(RESULT, RESULT_DAY)\n    \n    Return RESULT\n}\n\n// \u{7ed9}\u{65e5}\u{671f}\u{52a0}\u{4e0a}\u{6307}\u{5b9a}\u{6708}\u{6570}\nFunc DT_ADD_MONTHS(YEAR, MONTH, DAY, MONTHS_TO_ADD) {\n    Set RESULT_YEAR YEAR\n    Set RESULT_MONTH (MONTH + MONTHS_TO_ADD)\n    Set RESULT_DAY DAY\n    \n    // \u{5904}\u{7406}\u{6708}\u{4efd}\u{6ea2}\u{51fa}\n    While (RESULT_MONTH > 12) {\n        Set RESULT_MONTH (RESULT_MONTH - 12)\n        Set RESULT_YEAR (RESULT_YEAR + 1)\n    }\n    \n    // \u{786e}\u{4fdd}\u{65e5}\u{671f}\u{5408}\u{6cd5}\u{ff08}\u{4f8b}\u{5982}1\u{6708}31\u{65e5}\u{52a0}1\u{4e2a}\u{6708}\u{4e0d}\u{80fd}\u{662f}2\u{6708}31\u{65e5}\u{ff09}\n    Set MAX_DAYS DT_DAYS_IN_MONTH(RESULT_YEAR, RESULT_MONTH)\n    If (RESULT_DAY > MAX_DAYS) {\n        Set RESULT_DAY MAX_DAYS\n    }\n    \n    Set RESULT []\n    Set RESULT PUSH(RESULT, RESULT_YEAR)\n    Set RESULT PUSH(RESULT, RESULT_MONTH)\n    Set RESULT PUSH(RESULT, RESULT_DAY)\n    \n    Return RESULT\n}\n\n// \u{7ed9}\u{65e5}\u{671f}\u{52a0}\u{4e0a}\u{6307}\u{5b9a}\u{5e74}\u{6570}\nFunc DT_ADD_YEARS(YEAR, MONTH, DAY, YEARS_TO_ADD) {\n    Set RESULT_YEAR (YEAR + YEARS_TO_ADD)\n    Set RESULT_MONTH MONTH\n    Set RESULT_DAY DAY\n    \n    // \u{5904}\u{7406}2\u{6708}29\u{65e5}\u{7684}\u{7279}\u{6b8a}\u{60c5}\u{51b5}\n    If (MONTH == 2 && DAY == 29) {\n        Set IS_LEAP DT_IS_LEAP_YEAR(RESULT_YEAR)\n        If (!IS_LEAP) {\n            Set RESULT_DAY 28\n        }\n    }\n    \n    Set RESULT []\n    Set RESULT PUSH(RESULT, RESULT_YEAR)\n    Set RESULT PUSH(RESULT, RESULT_MONTH)\n    Set RESULT PUSH(RESULT, RESULT_DAY)\n    \n    Return RESULT\n}\n\n// ==================== \u{65f6}\u{95f4}\u{8ba1}\u{7b97} ====================\n\n// \u{8ba1}\u{7b97}\u{4e24}\u{4e2a}\u{65f6}\u{95f4}\u{70b9}\u{4e4b}\u{95f4}\u{7684}\u{79d2}\u{6570}\u{5dee}\nFunc DT_SECONDS_BETWEEN(HOUR1, MIN1, SEC1, HOUR2, MIN2, SEC2) {\n    Set TOTAL1 (HOUR1 * 3600 + MIN1 * 60 + SEC1)\n    Set TOTAL2 (HOUR2 * 3600 + MIN2 * 60 + SEC2)\n    \n    Return (TOTAL2 - TOTAL1)\n}\n\n// \u{5c06}\u{79d2}\u{6570}\u{8f6c}\u{6362}\u{4e3a}\u{5c0f}\u{65f6}\nFunc DT_SECONDS_TO_HOURS(SECONDS) {\n    Return (SECONDS / 3600)\n}\n\n// \u{5c06}\u{79d2}\u{6570}\u{8f6c}\u{6362}\u{4e3a}\u{5206}\u{949f}\nFunc DT_SECONDS_TO_MINUTES(SECONDS) {\n    Return (SECONDS / 60)\n}\n\n// ==================== \u{5e74}\u{9f84}\u{8ba1}\u{7b97} ====================\n\n// \u{6839}\u{636e}\u{51fa}\u{751f}\u{65e5}\u{671f}\u{8ba1}\u{7b97}\u{5e74}\u{9f84}\u{ff08}\u{7b80}\u{5316}\u{7248}\u{672c}\u{ff09}\nFunc DT_CALCULATE_AGE(BIRTH_YEAR, BIRTH_MONTH, BIRTH_DAY, CURRENT_YEAR, CURRENT_MONTH, CURRENT_DAY) {\n    Set AGE (CURRENT_YEAR - BIRTH_YEAR)\n    \n    // \u{5982}\u{679c}\u{8fd8}\u{6ca1}\u{5230}\u{751f}\u{65e5}\u{ff0c}\u{51cf}1\u{5c81}\n    If (CURRENT_MONTH < BIRTH_MONTH) {\n        Set AGE (AGE - 1)\n    } Elif (CURRENT_MONTH == BIRTH_MONTH && CURRENT_DAY < BIRTH_DAY) {\n        Set AGE (AGE - 1)\n    }\n    \n    Return AGE\n}\n\n// ==================== \u{5b63}\u{5ea6}\u{8ba1}\u{7b97} ====================\n\n// \u{83b7}\u{53d6}\u{6708}\u{4efd}\u{6240}\u{5c5e}\u{7684}\u{5b63}\u{5ea6}\u{ff08}1-4\u{ff09}\nFunc DT_GET_QUARTER(MONTH) {\n    If (MONTH >= 1 && MONTH <= 3) {\n        Return 1\n    } Elif (MONTH >= 4 && MONTH <= 6) {\n        Return 2\n    } Elif (MONTH >= 7 && MONTH <= 9) {\n        Return 3\n    } Elif (MONTH >= 10 && MONTH <= 12) {\n        Return 4\n    }\n    \n    Return 0\n}\n\n// \u{83b7}\u{53d6}\u{5b63}\u{5ea6}\u{7684}\u{7b2c}\u{4e00}\u{5929}\nFunc DT_QUARTER_START(YEAR, QUARTER) {\n    Set MONTH 1\n    \n    If (QUARTER == 2) {\n        Set MONTH 4\n    } Elif (QUARTER == 3) {\n        Set MONTH 7\n    } Elif (QUARTER == 4) {\n        Set MONTH 10\n    }\n    \n    Set RESULT []\n    Set RESULT PUSH(RESULT, YEAR)\n    Set RESULT PUSH(RESULT, MONTH)\n    Set RESULT PUSH(RESULT, 1)\n    \n    Return RESULT\n}\n\n// ==================== \u{5de5}\u{4f5c}\u{65e5}\u{8ba1}\u{7b97} ====================\n\n// \u{5224}\u{65ad}\u{662f}\u{5426}\u{4e3a}\u{5468}\u{672b}\nFunc DT_IS_WEEKEND(YEAR, MONTH, DAY) {\n    Set DAY_NUM DT_DAY_OF_WEEK(YEAR, MONTH, DAY)\n    Return (DAY_NUM == 0 || DAY_NUM == 6)\n}\n\n// \u{5224}\u{65ad}\u{662f}\u{5426}\u{4e3a}\u{5de5}\u{4f5c}\u{65e5}\nFunc DT_IS_WEEKDAY(YEAR, MONTH, DAY) {\n    Set IS_WEEKEND DT_IS_WEEKEND(YEAR, MONTH, DAY)\n    Return (!IS_WEEKEND)\n}\n\n";
Expand description

日期时间库