⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tclgetdate.y

📁 tcl是工具命令语言
💻 Y
📖 第 1 页 / 共 3 页
字号:
	    if ($1 < 100) {		yyHour = $1;		yyMinutes = 0;	    } else {		yyHour = $1 / 100;		yyMinutes = $1 % 100;	    }	    yySeconds = 0;	    yyMeridian = MER24;	}    };o_merid : /* NULL */ {            $$ = MER24;        }        | tMERIDIAN {            $$ = $1;        }        ;%%/* * Month and day table. */static TABLE    MonthDayTable[] = {    { "january",        tMONTH,  1 },    { "february",       tMONTH,  2 },    { "march",          tMONTH,  3 },    { "april",          tMONTH,  4 },    { "may",            tMONTH,  5 },    { "june",           tMONTH,  6 },    { "july",           tMONTH,  7 },    { "august",         tMONTH,  8 },    { "september",      tMONTH,  9 },    { "sept",           tMONTH,  9 },    { "october",        tMONTH, 10 },    { "november",       tMONTH, 11 },    { "december",       tMONTH, 12 },    { "sunday",         tDAY, 0 },    { "monday",         tDAY, 1 },    { "tuesday",        tDAY, 2 },    { "tues",           tDAY, 2 },    { "wednesday",      tDAY, 3 },    { "wednes",         tDAY, 3 },    { "thursday",       tDAY, 4 },    { "thur",           tDAY, 4 },    { "thurs",          tDAY, 4 },    { "friday",         tDAY, 5 },    { "saturday",       tDAY, 6 },    { NULL }};/* * Time units table. */static TABLE    UnitsTable[] = {    { "year",           tMONTH_UNIT,    12 },    { "month",          tMONTH_UNIT,     1 },    { "fortnight",      tDAY_UNIT,      14 },    { "week",           tDAY_UNIT,       7 },    { "day",            tDAY_UNIT,       1 },    { "hour",           tSEC_UNIT, 60 * 60 },    { "minute",         tSEC_UNIT,      60 },    { "min",            tSEC_UNIT,      60 },    { "second",         tSEC_UNIT,       1 },    { "sec",            tSEC_UNIT,       1 },    { NULL }};/* * Assorted relative-time words. */static TABLE    OtherTable[] = {    { "tomorrow",       tDAY_UNIT,      1 },    { "yesterday",      tDAY_UNIT,     -1 },    { "today",          tDAY_UNIT,      0 },    { "now",            tSEC_UNIT,      0 },    { "last",           tUNUMBER,      -1 },    { "this",           tSEC_UNIT,      0 },    { "next",           tNEXT,          1 },#if 0    { "first",          tUNUMBER,       1 },    { "second",         tUNUMBER,       2 },    { "third",          tUNUMBER,       3 },    { "fourth",         tUNUMBER,       4 },    { "fifth",          tUNUMBER,       5 },    { "sixth",          tUNUMBER,       6 },    { "seventh",        tUNUMBER,       7 },    { "eighth",         tUNUMBER,       8 },    { "ninth",          tUNUMBER,       9 },    { "tenth",          tUNUMBER,       10 },    { "eleventh",       tUNUMBER,       11 },    { "twelfth",        tUNUMBER,       12 },#endif    { "ago",            tAGO,   1 },    { "epoch",          tEPOCH,   0 },    { "stardate",       tSTARDATE, 0},    { NULL }};/* * The timezone table.  (Note: This table was modified to not use any floating * point constants to work around an SGI compiler bug). */static TABLE    TimezoneTable[] = {    { "gmt",    tZONE,     HOUR( 0) },      /* Greenwich Mean */    { "ut",     tZONE,     HOUR( 0) },      /* Universal (Coordinated) */    { "utc",    tZONE,     HOUR( 0) },    { "uct",    tZONE,     HOUR( 0) },      /* Universal Coordinated Time */    { "wet",    tZONE,     HOUR( 0) },      /* Western European */    { "bst",    tDAYZONE,  HOUR( 0) },      /* British Summer */    { "wat",    tZONE,     HOUR( 1) },      /* West Africa */    { "at",     tZONE,     HOUR( 2) },      /* Azores */#if     0    /* For completeness.  BST is also British Summer, and GST is     * also Guam Standard. */    { "bst",    tZONE,     HOUR( 3) },      /* Brazil Standard */    { "gst",    tZONE,     HOUR( 3) },      /* Greenland Standard */#endif    { "nft",    tZONE,     HOUR( 7/2) },    /* Newfoundland */    { "nst",    tZONE,     HOUR( 7/2) },    /* Newfoundland Standard */    { "ndt",    tDAYZONE,  HOUR( 7/2) },    /* Newfoundland Daylight */    { "ast",    tZONE,     HOUR( 4) },      /* Atlantic Standard */    { "adt",    tDAYZONE,  HOUR( 4) },      /* Atlantic Daylight */    { "est",    tZONE,     HOUR( 5) },      /* Eastern Standard */    { "edt",    tDAYZONE,  HOUR( 5) },      /* Eastern Daylight */    { "cst",    tZONE,     HOUR( 6) },      /* Central Standard */    { "cdt",    tDAYZONE,  HOUR( 6) },      /* Central Daylight */    { "mst",    tZONE,     HOUR( 7) },      /* Mountain Standard */    { "mdt",    tDAYZONE,  HOUR( 7) },      /* Mountain Daylight */    { "pst",    tZONE,     HOUR( 8) },      /* Pacific Standard */    { "pdt",    tDAYZONE,  HOUR( 8) },      /* Pacific Daylight */    { "yst",    tZONE,     HOUR( 9) },      /* Yukon Standard */    { "ydt",    tDAYZONE,  HOUR( 9) },      /* Yukon Daylight */    { "hst",    tZONE,     HOUR(10) },      /* Hawaii Standard */    { "hdt",    tDAYZONE,  HOUR(10) },      /* Hawaii Daylight */    { "cat",    tZONE,     HOUR(10) },      /* Central Alaska */    { "ahst",   tZONE,     HOUR(10) },      /* Alaska-Hawaii Standard */    { "nt",     tZONE,     HOUR(11) },      /* Nome */    { "idlw",   tZONE,     HOUR(12) },      /* International Date Line West */    { "cet",    tZONE,    -HOUR( 1) },      /* Central European */    { "cest",   tDAYZONE, -HOUR( 1) },      /* Central European Summer */    { "met",    tZONE,    -HOUR( 1) },      /* Middle European */    { "mewt",   tZONE,    -HOUR( 1) },      /* Middle European Winter */    { "mest",   tDAYZONE, -HOUR( 1) },      /* Middle European Summer */    { "swt",    tZONE,    -HOUR( 1) },      /* Swedish Winter */    { "sst",    tDAYZONE, -HOUR( 1) },      /* Swedish Summer */    { "fwt",    tZONE,    -HOUR( 1) },      /* French Winter */    { "fst",    tDAYZONE, -HOUR( 1) },      /* French Summer */    { "eet",    tZONE,    -HOUR( 2) },      /* Eastern Europe, USSR Zone 1 */    { "bt",     tZONE,    -HOUR( 3) },      /* Baghdad, USSR Zone 2 */    { "it",     tZONE,    -HOUR( 7/2) },    /* Iran */    { "zp4",    tZONE,    -HOUR( 4) },      /* USSR Zone 3 */    { "zp5",    tZONE,    -HOUR( 5) },      /* USSR Zone 4 */    { "ist",    tZONE,    -HOUR(11/2) },    /* Indian Standard */    { "zp6",    tZONE,    -HOUR( 6) },      /* USSR Zone 5 */#if     0    /* For completeness.  NST is also Newfoundland Stanard, nad SST is     * also Swedish Summer. */    { "nst",    tZONE,    -HOUR(13/2) },    /* North Sumatra */    { "sst",    tZONE,    -HOUR( 7) },      /* South Sumatra, USSR Zone 6 */#endif  /* 0 */    { "wast",   tZONE,    -HOUR( 7) },      /* West Australian Standard */    { "wadt",   tDAYZONE, -HOUR( 7) },      /* West Australian Daylight */    { "jt",     tZONE,    -HOUR(15/2) },    /* Java (3pm in Cronusland!) */    { "cct",    tZONE,    -HOUR( 8) },      /* China Coast, USSR Zone 7 */    { "jst",    tZONE,    -HOUR( 9) },      /* Japan Standard, USSR Zone 8 */    { "cast",   tZONE,    -HOUR(19/2) },    /* Central Australian Standard */    { "cadt",   tDAYZONE, -HOUR(19/2) },    /* Central Australian Daylight */    { "east",   tZONE,    -HOUR(10) },      /* Eastern Australian Standard */    { "eadt",   tDAYZONE, -HOUR(10) },      /* Eastern Australian Daylight */    { "gst",    tZONE,    -HOUR(10) },      /* Guam Standard, USSR Zone 9 */    { "nzt",    tZONE,    -HOUR(12) },      /* New Zealand */    { "nzst",   tZONE,    -HOUR(12) },      /* New Zealand Standard */    { "nzdt",   tDAYZONE, -HOUR(12) },      /* New Zealand Daylight */    { "idle",   tZONE,    -HOUR(12) },      /* International Date Line East */    /* ADDED BY Marco Nijdam */    { "dst",    tDST,     HOUR( 0) },       /* DST on (hour is ignored) */    /* End ADDED */    {  NULL  }};/* * Military timezone table. */static TABLE    MilitaryTable[] = {    { "a",      tZONE,  HOUR(  1) },    { "b",      tZONE,  HOUR(  2) },    { "c",      tZONE,  HOUR(  3) },    { "d",      tZONE,  HOUR(  4) },    { "e",      tZONE,  HOUR(  5) },    { "f",      tZONE,  HOUR(  6) },    { "g",      tZONE,  HOUR(  7) },    { "h",      tZONE,  HOUR(  8) },    { "i",      tZONE,  HOUR(  9) },    { "k",      tZONE,  HOUR( 10) },    { "l",      tZONE,  HOUR( 11) },    { "m",      tZONE,  HOUR( 12) },    { "n",      tZONE,  HOUR(- 1) },    { "o",      tZONE,  HOUR(- 2) },    { "p",      tZONE,  HOUR(- 3) },    { "q",      tZONE,  HOUR(- 4) },    { "r",      tZONE,  HOUR(- 5) },    { "s",      tZONE,  HOUR(- 6) },    { "t",      tZONE,  HOUR(- 7) },    { "u",      tZONE,  HOUR(- 8) },    { "v",      tZONE,  HOUR(- 9) },    { "w",      tZONE,  HOUR(-10) },    { "x",      tZONE,  HOUR(-11) },    { "y",      tZONE,  HOUR(-12) },    { "z",      tZONE,  HOUR(  0) },    { NULL }};/* * Dump error messages in the bit bucket. */static voidyyerror(s)    char  *s;{}static time_tToSeconds(Hours, Minutes, Seconds, Meridian)    time_t      Hours;    time_t      Minutes;    time_t      Seconds;    MERIDIAN    Meridian;{    if (Minutes < 0 || Minutes > 59 || Seconds < 0 || Seconds > 59)        return -1;    switch (Meridian) {    case MER24:        if (Hours < 0 || Hours > 23)            return -1;        return (Hours * 60L + Minutes) * 60L + Seconds;    case MERam:        if (Hours < 1 || Hours > 12)            return -1;        return ((Hours % 12) * 60L + Minutes) * 60L + Seconds;    case MERpm:        if (Hours < 1 || Hours > 12)            return -1;        return (((Hours % 12) + 12) * 60L + Minutes) * 60L + Seconds;    }    return -1;  /* Should never be reached */}/* *----------------------------------------------------------------------------- * * Convert -- * *      Convert a {month, day, year, hours, minutes, seconds, meridian, dst} *      tuple into a clock seconds value. * * Results: *      0 or -1 indicating success or failure. * * Side effects: *      Fills TimePtr with the computed value. * *----------------------------------------------------------------------------- */static intConvert(Month, Day, Year, Hours, Minutes, Seconds, Meridian, DSTmode, TimePtr)    time_t      Month;    time_t      Day;    time_t      Year;    time_t      Hours;    time_t      Minutes;    time_t      Seconds;    MERIDIAN    Meridian;    DSTMODE     DSTmode;    time_t     *TimePtr;{    static int  DaysInMonth[12] = {        31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31    };    time_t tod;    time_t Julian;    int i;    /* Figure out how many days are in February for the given year.     * Every year divisible by 4 is a leap year.     * But, every year divisible by 100 is not a leap year.     * But, every year divisible by 400 is a leap year after all.     */    DaysInMonth[1] = IsLeapYear(Year) ? 29 : 28;    /* Check the inputs for validity */    if (Month < 1 || Month > 12	    || Year < START_OF_TIME || Year > END_OF_TIME	    || Day < 1 || Day > DaysInMonth[(int)--Month])        return -1;    /* Start computing the value.  First determine the number of days     * represented by the date, then multiply by the number of seconds/day.     */    for (Julian = Day - 1, i = 0; i < Month; i++)        Julian += DaysInMonth[i];    if (Year >= EPOCH) {        for (i = EPOCH; i < Year; i++)            Julian += 365 + IsLeapYear(i);    } else {        for (i = Year; i < EPOCH; i++)            Julian -= 365 + IsLeapYear(i);    }    Julian *= SECSPERDAY;    /* Add the timezone offset ?? */    Julian += yyTimezone * 60L;    /* Add the number of seconds represented by the time component */    if ((tod = ToSeconds(Hours, Minutes, Seconds, Meridian)) < 0)        return -1;    Julian += tod;    /* Perform a preliminary DST compensation ?? */    if (DSTmode == DSTon     || (DSTmode == DSTmaybe && TclpGetDate((TclpTime_t)&Julian, 0)->tm_isdst))        Julian -= 60 * 60;    *TimePtr = Julian;    return 0;}static time_tDSTcorrect(Start, Future)    time_t      Start;    time_t      Future;{    time_t      StartDay;    time_t      FutureDay;    StartDay = (TclpGetDate((TclpTime_t)&Start, 0)->tm_hour + 1) % 24;    FutureDay = (TclpGetDate((TclpTime_t)&Future, 0)->tm_hour + 1) % 24;    return (Future - Start) + (StartDay - FutureDay) * 60L * 60L;}static time_tNamedDay(Start, DayOrdinal, DayNumber)    time_t      Start;    time_t      DayOrdinal;    time_t      DayNumber;{    struct tm   *tm;    time_t      now;    now = Start;    tm = TclpGetDate((TclpTime_t)&now, 0);    now += SECSPERDAY * ((DayNumber - tm->tm_wday + 7) % 7);    now += 7 * SECSPERDAY * (DayOrdinal <= 0 ? DayOrdinal : DayOrdinal - 1);    return DSTcorrect(Start, now);}static time_tNamedMonth(Start, MonthOrdinal, MonthNumber)    time_t Start;    time_t MonthOrdinal;    time_t MonthNumber;{    struct tm *tm;    time_t now;    int result;        now = Start;    tm = TclpGetDate((TclpTime_t)&now, 0);    /* To compute the next n'th month, we use this alg:     * add n to year value     * if currentMonth < requestedMonth decrement year value by 1 (so that     *  doing next february from january gives us february of the current year)     * set day to 1, time to 0     */    tm->tm_year += MonthOrdinal;    if (tm->tm_mon < MonthNumber - 1) {	tm->tm_year--;    }    result = Convert(MonthNumber, (time_t) 1, tm->tm_year + TM_YEAR_BASE,	    (time_t) 0, (time_t) 0, (time_t) 0, MER24, DSTmaybe, &now);    if (result < 0) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -