简而言之,并不存在一种存储日期的最好方法。对存储日期的方法的选择依赖于你究竟要做什么,你可能想把日期存成一个整数(可能是从历史上的某一天开始计算的天数),或者存成一个含月、日、年和其它信息的结构,或者存成一个文本字符串。文本字符串看起来并不实用,并且难以处理,但你应该看到它自有用处。
如果你只是记录一个数字型日期,这个问题就简单多了。你应该使用一种固有的格式,或者用一个整数来表示时间,等等。你还应该确定是否要存储当前日期,是否要更新日期,是否要检查两个日期之间的间隔,等等。完成这些任务的方法有许多种,并且它们大多使用c标准库中所含的格式和函数。但是,如果你在程序的设计中过早地定下一种格式,你就会受到限制。为了保持开阔的思路和程序的灵活性,你应该根据具体情况使用最合适的函数。
但是,你可能想用更复杂的方式表示日期。通常你会用多种不同的方法记忆日期。你不可能总是记住每一件事的准确日期,相反,你可能会把生活中一个重要的日期记成“我16岁生日聚会后的第三天”,或者把一个历史日期记成“奥特曼帝国覆灭后的第十年”。这样的日期不能用简单的数字或结构来表示,它们需要使用更复杂的方式。在存储这种相对日期的同时,你还可能想存储对一个计算机能够处理的已知日期的引用,或者存储一个固定日期。这种办法对日期的排序和操作是有帮助的。
存储时间的最好方法完全依赖于存储时间的目的和将要施加到时间值上的操作。下面将举出一些时间的不同用途,分析一下它们将有助于你更好地选择时间的存储方法。
假设你只需要记录事件发生的时间,并且要以“实时”方式记录。换句话说,你想确定某一事件发生的真实时间。你要记录的事件可能包括一个文件的创建。一个长而复杂的程序的开始和结束,或者写完一本书的某一章的时间。在这种情况下,你需要从计算机的系统时钟中取出当前时间并存储起来。较好并且较简单的方法是用一个现成的时间函数取出时间,并且直接按原来的格式存储起来。这种方法基本上不需要你做什么工作。
由于种种原因,你可能不想用标准C函数提供的格式存储时间。你可能想用一种更简单的格式,以使操作更加容易,或者想用不同的方式表示时间。在这种情况下,用一个整数值表示时间是个好办法,这种方法在13.2中曾介绍过。这种方法使时间使用起来又快又简单,而且使你可以比较不同的时间,看看哪一个更早。
与处理日期一样,计算时间也可以使用相对的方法,但这些方法很难量化。虽然“午后半小时”并不难量化,但“我吃完午饭后”就很难量化了。尽管这并不是记录时间的最简单的方法,但在有些情况下,这却是唯一的方法。在这些情况下,除了存储描述时间的文本字符串,你别无选择,而此时这也是最好的存储方法。