您可能需要处理四个常见的基于时间的值JMP :日期、时间、日期时间和持续时间。 无论您是从数据库还是平面文件导入数据,无论您是在 JSL 中引用它们还是在 JMP 中的轴上使用它们,了解 JMP 如何存储这些值以及使用它们的含义都很重要。
日期时间值
日期时间值表示特定日期的特定时间,例如:
- 2016 年 1 月 20 日 12:00
- 2018 年 11 月 7 日下午 3:00
- 1969 年 7 月 20 日20:17
与大多数分析应用程序一样,日期时间值在 JMP 中存储为自参考时间以来的多个时间单位。 在 JMP 中,参考时间为 1904 年 1 月 1 日凌晨 12:00,单位为秒。 更清楚地说:JMP 将日期存储为自 1904 年 1 月 1 日午夜以来的秒数。
因此,在我上面的示例中,与日期时间值对应的数值是:
| 约会时间 |
JMP 日期时间值
(自 1904 年 1 月 1 日午夜开始的秒数)
|
| 2018 年 1 月 20 日 12:00 |
3536136000 |
| 2018 年 11 月 7 日下午 3:00 |
468687600 |
| 1969 年 7 月 20 日20:17 |
2068661820 |
日期
在 JMP 中,日期值只是日期时间的一种特殊情况,因为它们假定一天中的时间是上午 12:00。因此,他们只计算从 1904 年 1 月 1 日午夜到所存储日期的午夜的秒数。
时代
时间值表示没有特定日期的一天中的某个时间。 JMP 将时间值存储为从午夜开始的一天中的秒数。 所以,12:01:01 AM 是 61。 距午夜 61 秒。
持续时间
持续时间并不是真的那么特别,除了它们是代表某个时间单位数量的数字。 毫不奇怪,当它们代表几秒时,JMP 可以最好地处理持续时间。 当我们讨论格式化基于时间的值以进行显示时,我们将更多地讨论这一点。
格式化基于时间的值以进行显示
将基于时间的值显示为秒数并不是特别有用,因此 JMP 有许多日期格式和时间格式用于显示这些值。
但请记住,更改日期的显示方式不会改变基础价值或分析方式。 例如,将格式更改为“m/y”(即月/年)不会强制 JMP 在您分析或绘制数据时按月汇总数据。 如果您想这样做,您需要创建一个新列,其中包含要汇总到的唯一值。 要创建这些新列,变换列通过右键单击标题并选择新公式列。
导入基于时间的值
导入数据时,请务必确保将基于时间的值存储为上述数值。 大多数情况下,JMP 会自动执行此操作,因为它会在导入或复制/粘贴操作期间尝试识别基于时间的值。 您可以通过查看列中的值在数据表中的对齐方式来判断这是否已正确完成。 数值右对齐,字符值左对齐。
Wrong is a character column. Notice it is left-justified. Right is numeric column. It is right-justified.错误的是一个字符列。 注意它是左对齐的。 右边是数字列。 它是正确的。
如果您发现有以字符串形式存储的基于时间的值,则可以使用“列信息”对话框对其进行转换。 只需将数据类型更改为数字,将格式更改为所需的日期/时间格式,并将输入格式更改为描述数据中字符串的格式。 然后 JMP 会将这些值转换为适当的数值。
First change the Data Type to Numeric.首先将数据类型更改为数字。
Pick the Format that you want to use to display the time-based value.选择要用于显示基于时间的值的格式。
Finally, change the Input format to match the format of the strings in the column.最后,更改输入格式以匹配列中字符串的格式。
解析 Date() 一个有用的函数
这解析日期() (及其别名,信息() ) 函数对于将字符串转换为数值也很有用。 当不使用可选的第三个参数时,它将扫描输入字符串并尝试找到适当的输入格式。 这使它成为一个通用功能,无论输入格式如何。
使用基于时间的值进行计算(即数学)
将所有这些基于时间的值存储为数字意味着我们可以对它们进行数学运算以计算年龄、自某个事件以来的时间、转换为其他时间单位等。
例如,JMP 中两个日期、时间或日期时间值之间的差异将是两个值之间的秒数。
这意味着您需要将结果转换为更友好的单位,例如分钟、天、周或年(提示:以小时为单位() ,在几周内()和其他 In...() 函数可以在这里提供帮助。)
JMP 有许多内置函数使基于时间的值的计算更容易。
以下是我最喜欢的几个:
一天中的时间(日期时间)
此函数返回日期时间值的一天中的时间(即,自午夜以来的秒数)。 这对于将日期时间值转换为日期值非常有用。 您只需要从日期时间中减去 Time of Day():
datetime = Today();
date = datetime - Time Of Day( datetime );
Show( As Date( date ) );
日期差异(datetime1, datetime2, "interval_name", <"alignment">)
此函数返回两个日期时间值之间的差异。 当然,您可以通过从另一个中减去一个来做到这一点,您将获得它们之间的秒数。 但是 Date Difference() 使您能够指定时间单位以使用“interval_name”参数返回差异。 例如:
datetime1 = 01Sep2018:03:00:01;
datetime2 = 04Sep2018:14:10:15;
Date Difference( datetime1, datetime2, "Hour" );
请务必查看完整列表日期时间函数. 它们使使用基于时间的值变得更加容易。
JSL 中的日期和时间常数
在 JSL 中表示日期、日期时间和时间常量需要您以特定格式指定它们。 对于日期,您必须以 ddMONyyyy 格式指定它们,对于时间,您必须使用 dd:hh:mm:ss 格式。 例如:
time = 14:10:15;
date = 18Jan1957;
datetime = 11Jul2000:03:10:12;