convtime.c
来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 187 行
C
187 行
#ifndef lintstatic char *sccsid = "@(#)convtime.c 4.1 (ULTRIX) 7/2/90";#endif lint/************************************************************************ * * * Copyright (c) 1987 by * * Digital Equipment Corporation, Maynard, MA * * All rights reserved. * * * * This software is furnished under a license and may be used and * * copied only in accordance with the terms of such license and * * with the inclusion of the above copyright notice. This * * software or any other copies thereof may not be provided or * * otherwise made available to any other person. No title to and * * ownership of the software is hereby transferred. * * * * This software is derived from software received from the * * University of California, Berkeley, and from Bell * * Laboratories. Use, duplication, or disclosure is subject to * * restrictions under license agreements with University of * * California and with AT&T. * * * * The information in this software is subject to change without * * notice and should not be construed as a commitment by Digital * * Equipment Corporation. * * * * Digital assumes no responsibility for the use or reliability * * of its software on equipment which is not supplied by Digital. * * * ************************************************************************/# include <ctype.h># include "useful.h"/*** CONVTIME -- convert time**** Takes a time as an ascii string with a trailing character** giving units:** s -- seconds** m -- minutes** h -- hours** d -- days (default)** w -- weeks** For example, "3d12h" is three and a half days.**** Parameters:** p -- pointer to ascii time.**** Returns:** time in seconds.**** Side Effects:** none.*/time_tconvtime(p) char *p;{ register time_t t, r; register char c; r = 0; while (*p != '\0') { t = 0; while (isdigit(c = *p++)) t = t * 10 + (c - '0'); if (c == '\0') p--; switch (c) { case 'w': /* weeks */ t *= 7; case 'd': /* days */ default: t *= 24; case 'h': /* hours */ t *= 60; case 'm': /* minutes */ t *= 60; case 's': /* seconds */ break; } r += t; } return (r);}/*** PINTVL -- produce printable version of a time interval**** Parameters:** intvl -- the interval to be converted** brief -- if TRUE, print this in an extremely compact form** (basically used for logging).**** Returns:** A pointer to a string version of intvl suitable for** printing or framing.**** Side Effects:** none.**** Warning:** The string returned is in a static buffer.*/# define PLURAL(n) ((n) == 1 ? "" : "s")char *pintvl(intvl, brief) time_t intvl; bool brief;{ static char buf[256]; register char *p; int wk, dy, hr, mi, se; if (intvl == 0 && !brief) return ("zero seconds"); /* decode the interval into weeks, days, hours, minutes, seconds */ se = intvl % 60; intvl /= 60; mi = intvl % 60; intvl /= 60; hr = intvl % 24; intvl /= 24; if (brief) dy = intvl; else { dy = intvl % 7; intvl /= 7; wk = intvl; } /* now turn it into a sexy form */ p = buf; if (brief) { if (dy > 0) { (void) sprintf(p, "%d+", dy); p += strlen(p); } (void) sprintf(p, "%02d:%02d:%02d", hr, mi, se); return (buf); } /* use the verbose form */ if (wk > 0) { (void) sprintf(p, ", %d week%s", wk, PLURAL(wk)); p += strlen(p); } if (dy > 0) { (void) sprintf(p, ", %d day%s", dy, PLURAL(dy)); p += strlen(p); } if (hr > 0) { (void) sprintf(p, ", %d hour%s", hr, PLURAL(hr)); p += strlen(p); } if (mi > 0) { (void) sprintf(p, ", %d minute%s", mi, PLURAL(mi)); p += strlen(p); } if (se > 0) { (void) sprintf(p, ", %d second%s", se, PLURAL(se)); p += strlen(p); } return (buf + 2);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?