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

📄 getdate.y

📁 gnu tar 源码包。 tar 软件是 Unix 系统下的一个打包软件
💻 Y
📖 第 1 页 / 共 3 页
字号:
      { $$ = RELATIVE_TIME_0; $$.year = $1; }  | tUNUMBER tYEAR_UNIT      { $$ = RELATIVE_TIME_0; $$.year = $1.value; }  | tYEAR_UNIT      { $$ = RELATIVE_TIME_0; $$.year = 1; }  | tORDINAL tMONTH_UNIT      { $$ = RELATIVE_TIME_0; $$.month = $1; }  | tUNUMBER tMONTH_UNIT      { $$ = RELATIVE_TIME_0; $$.month = $1.value; }  | tMONTH_UNIT      { $$ = RELATIVE_TIME_0; $$.month = 1; }  | tORDINAL tDAY_UNIT      { $$ = RELATIVE_TIME_0; $$.day = $1 * $2; }  | tUNUMBER tDAY_UNIT      { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; }  | tDAY_UNIT      { $$ = RELATIVE_TIME_0; $$.day = $1; }  | tORDINAL tHOUR_UNIT      { $$ = RELATIVE_TIME_0; $$.hour = $1; }  | tUNUMBER tHOUR_UNIT      { $$ = RELATIVE_TIME_0; $$.hour = $1.value; }  | tHOUR_UNIT      { $$ = RELATIVE_TIME_0; $$.hour = 1; }  | tORDINAL tMINUTE_UNIT      { $$ = RELATIVE_TIME_0; $$.minutes = $1; }  | tUNUMBER tMINUTE_UNIT      { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; }  | tMINUTE_UNIT      { $$ = RELATIVE_TIME_0; $$.minutes = 1; }  | tORDINAL tSEC_UNIT      { $$ = RELATIVE_TIME_0; $$.seconds = $1; }  | tUNUMBER tSEC_UNIT      { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; }  | tSDECIMAL_NUMBER tSEC_UNIT      { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; }  | tUDECIMAL_NUMBER tSEC_UNIT      { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; }  | tSEC_UNIT      { $$ = RELATIVE_TIME_0; $$.seconds = 1; }  | relunit_snumber  ;relunit_snumber:    tSNUMBER tYEAR_UNIT      { $$ = RELATIVE_TIME_0; $$.year = $1.value; }  | tSNUMBER tMONTH_UNIT      { $$ = RELATIVE_TIME_0; $$.month = $1.value; }  | tSNUMBER tDAY_UNIT      { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; }  | tSNUMBER tHOUR_UNIT      { $$ = RELATIVE_TIME_0; $$.hour = $1.value; }  | tSNUMBER tMINUTE_UNIT      { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; }  | tSNUMBER tSEC_UNIT      { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; }  ;seconds: signed_seconds | unsigned_seconds;signed_seconds:    tSDECIMAL_NUMBER  | tSNUMBER      { $$.tv_sec = $1.value; $$.tv_nsec = 0; }  ;unsigned_seconds:    tUDECIMAL_NUMBER  | tUNUMBER      { $$.tv_sec = $1.value; $$.tv_nsec = 0; }  ;number:    tUNUMBER      { digits_to_date_time (pc, $1); }  ;hybrid:    tUNUMBER relunit_snumber      {	/* Hybrid all-digit and relative offset, so that we accept e.g.,	   "YYYYMMDD +N days" as well as "YYYYMMDD N days".  */	digits_to_date_time (pc, $1);	pc->rel.ns += $2.ns;	pc->rel.seconds += $2.seconds;	pc->rel.minutes += $2.minutes;	pc->rel.hour += $2.hour;	pc->rel.day += $2.day;	pc->rel.month += $2.month;	pc->rel.year += $2.year;	pc->rels_seen = true;      }  ;o_colon_minutes:    /* empty */      { $$ = -1; }  | ':' tUNUMBER      { $$ = $2.value; }  ;o_merid:    /* empty */      { $$ = MER24; }  | tMERIDIAN      { $$ = $1; }  ;%%static table const meridian_table[] ={  { "AM",   tMERIDIAN, MERam },  { "A.M.", tMERIDIAN, MERam },  { "PM",   tMERIDIAN, MERpm },  { "P.M.", tMERIDIAN, MERpm },  { NULL, 0, 0 }};static table const dst_table[] ={  { "DST", tDST, 0 }};static table const month_and_day_table[] ={  { "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, 0, 0 }};static table const time_units_table[] ={  { "YEAR",	tYEAR_UNIT,	 1 },  { "MONTH",	tMONTH_UNIT,	 1 },  { "FORTNIGHT",tDAY_UNIT,	14 },  { "WEEK",	tDAY_UNIT,	 7 },  { "DAY",	tDAY_UNIT,	 1 },  { "HOUR",	tHOUR_UNIT,	 1 },  { "MINUTE",	tMINUTE_UNIT,	 1 },  { "MIN",	tMINUTE_UNIT,	 1 },  { "SECOND",	tSEC_UNIT,	 1 },  { "SEC",	tSEC_UNIT,	 1 },  { NULL, 0, 0 }};/* Assorted relative-time words. */static table const relative_time_table[] ={  { "TOMORROW",	tDAY_UNIT,	 1 },  { "YESTERDAY",tDAY_UNIT,	-1 },  { "TODAY",	tDAY_UNIT,	 0 },  { "NOW",	tDAY_UNIT,	 0 },  { "LAST",	tORDINAL,	-1 },  { "THIS",	tORDINAL,	 0 },  { "NEXT",	tORDINAL,	 1 },  { "FIRST",	tORDINAL,	 1 },/*{ "SECOND",	tORDINAL,	 2 }, */  { "THIRD",	tORDINAL,	 3 },  { "FOURTH",	tORDINAL,	 4 },  { "FIFTH",	tORDINAL,	 5 },  { "SIXTH",	tORDINAL,	 6 },  { "SEVENTH",	tORDINAL,	 7 },  { "EIGHTH",	tORDINAL,	 8 },  { "NINTH",	tORDINAL,	 9 },  { "TENTH",	tORDINAL,	10 },  { "ELEVENTH",	tORDINAL,	11 },  { "TWELFTH",	tORDINAL,	12 },  { "AGO",	tAGO,		 1 },  { NULL, 0, 0 }};/* The universal time zone table.  These labels can be used even for   time stamps that would not otherwise be valid, e.g., GMT time   stamps in London during summer.  */static table const universal_time_zone_table[] ={  { "GMT",	tZONE,     HOUR ( 0) },	/* Greenwich Mean */  { "UT",	tZONE,     HOUR ( 0) },	/* Universal (Coordinated) */  { "UTC",	tZONE,     HOUR ( 0) },  { NULL, 0, 0 }};/* The time zone table.  This table is necessarily incomplete, as time   zone abbreviations are ambiguous; e.g. Australians interpret "EST"   as Eastern time in Australia, not as US Eastern Standard Time.   You cannot rely on getdate to handle arbitrary time zone   abbreviations; use numeric abbreviations like `-0500' instead.  */static table const time_zone_table[] ={  { "WET",	tZONE,     HOUR ( 0) },	/* Western European */  { "WEST",	tDAYZONE,  HOUR ( 0) },	/* Western European Summer */  { "BST",	tDAYZONE,  HOUR ( 0) },	/* British Summer */  { "ART",	tZONE,	  -HOUR ( 3) },	/* Argentina */  { "BRT",	tZONE,	  -HOUR ( 3) },	/* Brazil */  { "BRST",	tDAYZONE, -HOUR ( 3) },	/* Brazil Summer */  { "NST",	tZONE,	 -(HOUR ( 3) + 30) },	/* Newfoundland Standard */  { "NDT",	tDAYZONE,-(HOUR ( 3) + 30) },	/* Newfoundland Daylight */  { "AST",	tZONE,    -HOUR ( 4) },	/* Atlantic Standard */  { "ADT",	tDAYZONE, -HOUR ( 4) },	/* Atlantic Daylight */  { "CLT",	tZONE,    -HOUR ( 4) },	/* Chile */  { "CLST",	tDAYZONE, -HOUR ( 4) },	/* Chile Summer */  { "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 */  { "AKST",	tZONE,    -HOUR ( 9) },	/* Alaska Standard */  { "AKDT",	tDAYZONE, -HOUR ( 9) },	/* Alaska Daylight */  { "HST",	tZONE,    -HOUR (10) },	/* Hawaii Standard */  { "HAST",	tZONE,	  -HOUR (10) },	/* Hawaii-Aleutian Standard */  { "HADT",	tDAYZONE, -HOUR (10) },	/* Hawaii-Aleutian Daylight */  { "SST",	tZONE,    -HOUR (12) },	/* Samoa Standard */  { "WAT",	tZONE,     HOUR ( 1) },	/* West Africa */  { "CET",	tZONE,     HOUR ( 1) },	/* Central European */  { "CEST",	tDAYZONE,  HOUR ( 1) },	/* Central European Summer */  { "MET",	tZONE,     HOUR ( 1) },	/* Middle European */  { "MEZ",	tZONE,     HOUR ( 1) },	/* Middle European */  { "MEST",	tDAYZONE,  HOUR ( 1) },	/* Middle European Summer */  { "MESZ",	tDAYZONE,  HOUR ( 1) },	/* Middle European Summer */  { "EET",	tZONE,     HOUR ( 2) },	/* Eastern European */  { "EEST",	tDAYZONE,  HOUR ( 2) },	/* Eastern European Summer */  { "CAT",	tZONE,	   HOUR ( 2) },	/* Central Africa */  { "SAST",	tZONE,	   HOUR ( 2) },	/* South Africa Standard */  { "EAT",	tZONE,	   HOUR ( 3) },	/* East Africa */  { "MSK",	tZONE,	   HOUR ( 3) },	/* Moscow */  { "MSD",	tDAYZONE,  HOUR ( 3) },	/* Moscow Daylight */  { "IST",	tZONE,	  (HOUR ( 5) + 30) },	/* India Standard */  { "SGT",	tZONE,     HOUR ( 8) },	/* Singapore */  { "KST",	tZONE,     HOUR ( 9) },	/* Korea Standard */  { "JST",	tZONE,     HOUR ( 9) },	/* Japan Standard */  { "GST",	tZONE,     HOUR (10) },	/* Guam Standard */  { "NZST",	tZONE,     HOUR (12) },	/* New Zealand Standard */  { "NZDT",	tDAYZONE,  HOUR (12) },	/* New Zealand Daylight */  { NULL, 0, 0 }};/* Military time zone table. */static table const military_table[] ={  { "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, 0, 0 }};/* Convert a time zone expressed as HH:MM into an integer count of   minutes.  If MM is negative, then S is of the form HHMM and needs   to be picked apart; otherwise, S is of the form HH.  */static long inttime_zone_hhmm (textint s, long int mm){  if (mm < 0)    return (s.value / 100) * 60 + s.value % 100;  else    return s.value * 60 + (s.negative ? -mm : mm);}static intto_hour (long int hours, int meridian){  switch (meridian)    {    default: /* Pacify GCC.  */    case MER24:      return 0 <= hours && hours < 24 ? hours : -1;    case MERam:      return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1;    case MERpm:      return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1;    }}static long intto_year (textint textyear){  long int year = textyear.value;  if (year < 0)    year = -year;  /* XPG4 suggests that years 00-68 map to 2000-2068, and     years 69-99 map to 1969-1999.  */  else if (textyear.digits == 2)    year += year < 69 ? 2000 : 1900;  return year;}static table const *lookup_zone (parser_control const *pc, char const *name){  table const *tp;  for (tp = universal_time_zone_table; tp->name; tp++)    if (strcmp (name, tp->name) == 0)      return tp;  /* Try local zone abbreviations before those in time_zone_table, as     the local ones are more likely to be right.  */  for (tp = pc->local_time_zone_table; tp->name; tp++)    if (strcmp (name, tp->name) == 0)      return tp;  for (tp = time_zone_table; tp->name; tp++)    if (strcmp (name, tp->name) == 0)      return tp;  return NULL;}#if ! HAVE_TM_GMTOFF/* Yield the difference between *A and *B,   measured in seconds, ignoring leap seconds.   The body of this function is taken directly from the GNU C Library;   see src/strftime.c.  */static long inttm_diff (struct tm const *a, struct tm const *b){  /* Compute intervening leap days correctly even if year is negative.     Take care to avoid int overflow in leap day calculations.  */  int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3);  int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3);  int a100 = a4 / 25 - (a4 % 25 < 0);  int b100 = b4 / 25 - (b4 % 25 < 0);  int a400 = SHR (a100, 2);  int b400 = SHR (b100, 2);  int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);  long int ayear = a->tm_year;  long int years = ayear - b->tm_year;  long int days = (365 * years + intervening_leap_days		   + (a->tm_yday - b->tm_yday));  return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))		+ (a->tm_min - b->tm_min))	  + (a->tm_sec - b->tm_sec));}#endif /* ! HAVE_TM_GMTOFF */static table const *lookup_word (parser_control const *pc, char *word){  char *p;  char *q;  size_t wordlen;  table const *tp;  bool period_found;  bool abbrev;  /* Make it uppercase.  */  for (p = word; *p; p++)    {      unsigned char ch = *p;      *p = toupper (ch);    }  for (tp = meridian_table; tp->name; tp++)    if (strcmp (word, tp->name) == 0)      return tp;  /* See if we have an abbreviation for a month. */  wordlen = strlen (word);  abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.');  for (tp = month_and_day_table; tp->name; tp++)    if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0)      return tp;  if ((tp = lookup_zone (pc, word)))    return tp;  if (strcmp (word, dst_table[0].name) == 0)    return dst_table;  for (tp = time_units_table; tp->name; tp++)    if (strcmp (word, tp->name) == 0)      return tp;  /* Strip off any plural and try the units table again. */  if (word[wordlen - 1] == 'S')    {      word[wordlen - 1] = '\0';      for (tp = time_units_table; tp->name; tp++)	if (strcmp (word, tp->name) == 0)	  return tp;      word[wordlen - 1] = 'S';	/* For "this" in relative_time_table.  */    }  for (tp = relative_time_table; tp->name; tp++)    if (strcmp (word, tp->name) == 0)      return tp;  /* Military time zones. */  if (wordlen == 1)    for (tp = military_table; tp->name; tp++)      if (word[0] == tp->name[0])	return tp;  /* Drop out any periods and try the time zone table again. */  for (period_found = false, p = q = word; (*p = *q); q++)    if (*q == '.')      period_found = true;    else      p++;  if (period_found && (tp = lookup_zone (pc, word)))    return tp;  return NULL;}static intyylex (YYSTYPE *lvalp, parser_control *pc){  unsigned char c;  size_t count;  for (;;)    {      while (c = *pc->input, isspace (c))	pc->input++;      if (ISDIGIT (c) || c == '-' || c == '+')	{	  char const *p;	  int sign;	  unsigned long int value;	  if (c == '-' || c == '+')	    {	      sign = c == '-' ? -1 : 1;	      while (c = *++pc->input, isspace (c))		continue;	      if (! ISDIGIT (c))		/* skip the '-' sign */		continue;	    }	  else	    sign = 0;	  p = pc->input;	  for (value = 0; ; value *= 10)	    {	      unsigned long int value1 = value + (c - '0');	      if (value1 < value)		return '?';	      value = value1;	      c = *++p;	      if (! ISDIGIT (c))		break;	      if (ULONG_MAX / 10 < value)		return '?';	    }	  if ((c == '.' || c == ',') && ISDIGIT (p[1]))	    {	      time_t s;	      int ns;	      int digits;	      unsigned long int value1;	      /* Check for overflow when converting value to time_t.  */	      if (sign < 0)		{		  s = - value;		  if (0 < s)		    return '?';		  value1 = -s;		}	      else		{		  s = value;		  if (s < 0)		    return '?';		  value1 = s;		}

⌨️ 快捷键说明

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