存储一周时间的最佳方式

时间:2012-04-08 01:14:34

标签: mysql perl

我有一种情况,我希望用户能够指定时间范围,其中时间是给定周内存在的相对范围。因此,用户可以选择周一下午5点 - 周二凌晨1点。想想它有点像“一个人的工作时间转移”。

我的第一反应是我可以存储“相对”时间。假设周一开始于周一00:00:00,周一中午将表示为86400/2 = 43200 。我不太喜欢这种方法,因为它使处理时区有点困难。

这样做(或者只是一个好的)是否有“最佳”方式? MySQL是否有某种特定的数据类型?

我已经标记了这个“Perl”和“MySQL”,因为我将它们用于这个应用程序,但答案不一定要特别针对它们中的任何一个。

2 个答案:

答案 0 :(得分:0)

最佳答案将取决于您对下游数据的处理方式。

但我建议避免任何黑客攻击并采取直接的方法(表格语法Sybase,因为我的MySQL生锈了 - 抱歉)

CREATE TABLE weekday_ranges (
    start_dow    int,  -- 0-6 or 1-7 depending on what's easier downstream 
    start_hour   int,  -- 0-23
    start_minute int,  -- 0-59
    -- Add seconds/micorseconds as needed
    end_dow      int,
    end_hour     int,
    end_minute   int
)

另一种方法是存储从星期日00:00开始和结束偏移的偏移量(以秒为单位)。这提供了它的好处(例如,范围比较仅仅是<>运算符而不是复杂的表达式。)

答案 1 :(得分:-1)

将开始和结束时间分别存储在一个字段中(而不是分解为部分)将允许对字段进行索引。否则,没有太大的区别。 (这取决于选择是将部件组装成Perl还是SQL中的一个值。)

确实存在无法解决的时区问题:在切换到DST期间,您无法区分前一个凌晨2点和第二个凌晨2点。输入中没有足够的信息来处理它。