罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

介绍了新的日期和时间MATLAB数据类型

今天我想介绍一个客座博客,安德里亚Ho在MATLAB在MathWorks文档团队工作。今天,安德里亚将讨论三个新的数据类型代表在MATLAB R2014b——日期和时间datetime,持续时间,calendarDuration

内容

为什么新数据类型?

日期和时间经常是数据分析的关键部分。如果他们是你的工作的一部分,你可能遇到的一些限制日期数字后,向量,日期和日期字符串:

  • 串行日期数字用于数值计算,但他们很难解释或调试。
  • 日期字符串向量和清楚地沟通日期和时间在一个人类可读的格式,但它们并不是有用的计算和比较。
  • 日期数字,日期向量,和字符串表示的时间点和长度的时间(时间)是令人困惑。例如,日期向量(2015年1 1 0 0 0)代表2015年1月1日午夜,或运行时间2015年,1月,1天?

从R2014b开始,datetime,持续时间,calendarDuration是数据类型用于存储日期和时间数据,并从数值很容易区分。这三种类型区分的时间点,时间常数的单位长度(如小时、分钟和秒),并在单位的时间灵活的长度(如几周和几个月)。datetime,持续时间,calendarDuration表示日期和时间的方式很容易阅读,适用于计算,具有更高的精度(纳秒精度),而且更加节约内存。新的数据类型,您不需要维持或转换不同表示相同的日期和时间值。一起工作datetime,持续时间,calendarDuration就像你与数值类型使用标准的数组操作。

让我们看看新数据类型的行动。

datetime的时间点

datetime数据类型代表绝对的时间点,比如1月1日,2015年在午夜。的datetime函数可以创建一个datetime从当前日期和时间变量:

t0 = datetime (“现在”)
t0 = 16 - 1月- 2015 16:24:30

或数字输入:

t0 = datetime (2015、1、1、2、3、4)
t0 = 01 - 1月- 2015 02:03:04
t0
类属性名称大小字节t0 1 x1 121 datetime

如果你有兴趣在时间的一部分t0,您可以显示。

t0。格式=“HH: mm”
t0 = 02:03

改变一个datetime变量会影响它的格式显示,但不是它的数值。虽然看不到年、月和日的价值观,这些信息仍然是存储在变量中。让我们把日期的显示部分t0回来了。

t0。格式=“dd-MMM-yyyy HH: mm”
t0 = 01 - 1月- 2015 02:03

通过改变显示格式,您可以查看的价值datetime变量与纳秒精度!

t0。格式=“dd-MMM-yyyy HH: mm: ss.SSSSSSSSS”
t0 = 01 - 1月- 2015 02:03:04.000000000

如果你是一个频繁的日期字符串格式的用户,你会认识到一些格式说明符datetime不同于那些对吗datestr,datenum,datevec功能. .新格式的语法允许更多的选项,现在一致Unicode语言环境数据标记语言(LDML)标准

例子:计算驾驶时间

持续时间数据类型表示的两个特定的时间点之间的区别。假设你开车一夜之间,离开你的家1月1日,2015晚上11点,到达你的目的地第二天凌晨四点半。你花多少时间在路上吗?(忽略进入另一个时区的可能性;我们将看到如何datetime管理一个时区未来的文章。)

t0 = datetime(2015年,1,1,23岁,0,0);t1 = datetime(2015年1、2、4、30 0);dt = t1-t0
dt = 05:30:00

dt是一个持续时间变量显示为小时:分钟:秒。就像datetime,持续时间的行为大多是像一个数字值,但显示的格式显示时间。让我们改变格式的视图dt作为一个数量的分钟。

dt。格式=“米”
dt = 330分钟

我们可以执行常见的算术操作日期和时间变量。尽管dt目前显示的分钟数,我们可以添加或减去任何单位的持续时间,包括时间和秒。

dt2 = dt -小时(1)+秒(5)
dt2 = 270.08分钟

例如:验证付款计划

假设你开设了一个银行账户1月1日,2014年。帐户支付利息每月每月的最后一天。让我们找到感兴趣的第一次约会。有解决方案并不依赖于开户日期吗?的dateshift函数是用于转移的开始或结束日期时间单位。在我们的例子中,我们将开户日期到月底。

t0 = datetime (2014、1、1);t1 = dateshift (t0,“结束”,“月”)
t1 = 31 - 1月- 2014

假设我们的记录表明,中午我们收到利息。我们可以将这些信息添加到t1通过修改它小时财产。

t1。小时= 12;

现在让我们创建一个序列的日期代表未来12付款日期。如果我们加增加30天t1吗?

t = t1 +天(0:30:335)'
t = 2014年- 1月31日12:00:00 02 - mar - 2014 12:00:00 01 - 4月- 2014年12:00:00 01 - 2014年5月- 2014 12:00:00 31 - 5月-日12:00:00 30 - 2014年6月——12:00:00 30 - 2014年7月29日12:00:00 - 8月- 2014 12:00:00 28 - 9 - 2014 12:00:00 2014年- 10月28日12:00:00 2014年- 11月27日12:00:00 2014年- 12月27日12:00:00

啊,大多数这些日期不落在每月的最后一天。一个持续时间30天,每天24小时的准确时间,没有使用正确的步长。大小取决于正确的一步,因为几个月有30天,而其他人则31(或者28或29)。我们真正要做的是添加一个系列的日历月t1

t = t1 + calmonths (0:11) '
t = 31 - 2014年1月- 2014年2月28 - - - 3月- 2014年4月30 - 31 - 2014 31 - 2014年5月- 30 - 2014年6月- 8月31日- 2014年7月31日- 2014年9月30 - 31 - 2014——2014年10月- 2014年11月30 - - 31 - 12月- 2014

calmonths函数创建一个calendarDuration数组包含日历月。一个calendarDuration值代表一个灵活的或不恒定的时间,比如1个月。没有办法确切地知道有多少天,小时,分钟,秒有1月不知道哪个月我指。一个日历月的长度是未知的,直到你与一个特定的时间点。

多少天之间的付款日期?

dt = caldiff (t)“天”)
dt = 28 d 31 d 30 d 31 d 30 d 31 d 31 d 30 d 31 d 30 d 31 d

每个日历月增量代表一个不同的天数。

我们的银行给我们一个文件命名interest.txt包含每个月利息金额。我们可以导入这些数据交互使用导入工具

另外,我们可以使用readtabletextscan函数来读取文件编程的方式。使用% D说明符读一个日期或时间字符串和花括号内指定的字符串格式。

T = readtable (“interest.txt”,“格式”,' % D {dd嗯yyyy HH: mm} % f ')
T =日期从2014年1月31日12点利息_______________________ 1.93 2014年2月28日12:00 4.28 2014年3月31日12点4.82 2014年4月30日12:00 1.23 2014年5月31日12点5.89 2014年6月30日12:00 2.26 3.84 2014年7月31日12点2014年8月31日12点5.82 2014年9月30日12:00 2.51 2014年10月31日12点2.99 2014年11月30日12:00 6.17 2.65 2014年12月31日12点

尽管文本文件包含字符串,中的值日期列的表不是字符串。他们是datetime值。

如果我们把我们的付款时间与银行的数据,我们会发现他们是一样的。

T.Date isequal (t)
ans = 1

现在让我们计算每个月月底累计利息和画出数据。当使用情节,处理datetime容易得多比使用串行日期数字。

c_payments = cumsum (T.Interest);图绘制(T.Date c_payments)包含(“日期”)ylabel (的利息也)

轴自动标示日期字符串,很容易理解。你不再需要电话datetick要做到这一点!如果我们想改变日期的格式,我们可以指定所需的格式调用axis蜱虫的情节

图绘制(T.Date c_payments,“DatetimeTickFormat”,“嗯”)包含(“日期”)ylabel (的利息也甘氨胆酸)ax =;斧子。XTickLabelRotation = -15;

创建图表包含日期和时间值使用其他绘图功能,你仍然需要使用串行数字日期。我们认识到,这是不方便的,我们计划改进。你可以了解更多在这里如何策划datetime持续时间值。

还有什么?

请注意,在我们的旅行时间和利息的分析,没有需要使用串行日期数字,日期向量,或字符串。datetime,持续时间,calendarDuration允许您快速地操作日期和时间,更直观。新数据类型的目的是作为替代datenum,datevec,datestr。然而,这些老的功能将在MATLAB在可预见的未来继续存在,因为我们知道,许多人依靠现有的代码。

在以后的文章中,我将展示如何去做datetime,持续时间,calendarDuration允许您使用时区,日光节约时间,在除英语之外的其他语言和日期。

你的想法呢?

你看到自己使用新的日期和时间数据类型和你的数据?让我们知道你的评论在这里




发表与MATLAB®R2014b


  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。