当前位置:文档之家› C语言编程要点---第13章 时间和日期

C语言编程要点---第13章 时间和日期

的是,一个C编译程序往往会提供多个处理时间的函数,而它们的处理方式却互不相同。这些函数分别应该在什么情况下使用呢?本章试图回答一些关于时间和日期的常见问题。

13.1. 怎样把日期存储到单个数字中?有这方面的标准吗?

有好几个原因使你想把日期转换成单个数字,包括为了节省存储空间或进行简单的比较。此外,你也许想用转换所得的数字作为编程结构中的一部分。无论如何,如果你想用单个数字表示日期,你就需要问一下自己为什么要这样做,以及你想怎样处理转换所得的数字。回答这些问题将有助于你确定哪种转换方法最好。首先,请看一个简单的例子:

# include <stdio. h>

# include <stdlib. h>

main ( )

{

int month, day, year;

unsigned long result;

printf( &uot;Enter Month, Day, Year : \n&uot;);

fflush( stdout ) ;

scanf( &uot;%d %d %d&uot; , &month, &day, &year ))

result = year;

result | =month << 12;

result | =day << 14;

printf( &uot;The result is: %ul. \n&uot; , result );

}

这个程序通过位操作把三个变量转换为单个数字,以下是它的一种运行示例:

Enter Month,Day,Year:

11 22 1972

The result is:470281.

尽管这个程序确实能工作(你可以把它输入计算机测试一下),但它还有一些缺陷。在进一步讨论之前,最好还是先指出其中的一些缺陷分别是什么。

你想到其中的某些缺陷了吗?以下是其中的几种缺陷:

?月份、日和年份是不受限制的,这意味着它们的存储区域必须比实际需要的大,而这将牺牲效率。此外,用户可以输入一个任意大的数值,以致超出位域的边界,从而导致一个完全错误的日期。

?由日期转换而来的数字不是有序的,你不能根据这些数字对日期进行比较,而这种功能却能带来很大的方便。

?各成员在转换所得的数字中的安置是简单的,甚至是随意的,然而把它们抽取出来却不那么简单了(你能想出一个简单的办法吗?)。你真正需要的可能是一种存储日期和抽取日期都比较简单的格式。 下面我们逐个分析这些问题。

月份的范围应该从1到12,日期的范围应该从1到31,然而年份却与众不同。你可以根据你的目的把程序中要使用的年份限制在一个范围内。这个范围是可以变化的,具体视程序的目的而定。有些程序需要使用的日期可能在遥远的过去,而另一些程序需要

相关主题
文本预览
相关文档 最新文档