convert.todatetime指定日期格式_MATLAB的时间与日期
7 ?日期和時(shí)間
MATLAB在2014b版本中將日期和時(shí)間獨(dú)立成了一個(gè)數(shù)據(jù)類型,新的版本中對(duì)于時(shí)間數(shù)據(jù)的處理功能更為強(qiáng)大。比如datetime和duration等函數(shù),可以支持對(duì)時(shí)間的高效計(jì)算、對(duì)比、格式化顯示。對(duì)這類數(shù)組的操作方法和對(duì)普通數(shù)組的操作是基本一致的。下面我們就對(duì)主要的功能進(jìn)行介紹。
7.1 ?創(chuàng)建日期和時(shí)間數(shù)組
存儲(chǔ)日期和時(shí)間信息的最主要形式就是datatime數(shù)組,它支持代數(shù)運(yùn)算、排序、比較、繪圖和格式化顯示。代數(shù)運(yùn)算的結(jié)果通過(guò)duration數(shù)組返回,如果采用基于日歷的函數(shù)進(jìn)行的計(jì)算,那么返回的結(jié)果將是calendarDuration數(shù)組。Matlab提供了以下函數(shù)來(lái)進(jìn)行日期及時(shí)間類型的計(jì)算,請(qǐng)見(jiàn)表3-11 。
表3-11?日期和時(shí)間函數(shù)
函 ???數(shù) | 說(shuō) ???明 | 函 ???數(shù) | 說(shuō) ???明 |
datetime | 基于當(dāng)前日期創(chuàng)建時(shí)間數(shù)組,或者將日期字符串或數(shù)據(jù)轉(zhuǎn)換為時(shí)間數(shù)組 | yyyymmdd | 將MATLAB datetime數(shù)據(jù)類型轉(zhuǎn)化為YYYYMMDD數(shù)值格式 |
years | 年數(shù)長(zhǎng)度 | minutes | 分鐘數(shù)長(zhǎng)度 |
days | 天數(shù)長(zhǎng)度 | seconds | 秒數(shù)長(zhǎng)度 |
hours | 小時(shí)數(shù)長(zhǎng)度 | duration | 由數(shù)值創(chuàng)建duration數(shù)組 |
calyears | 日歷年數(shù)長(zhǎng)度 | calweeks | 日歷星期數(shù)長(zhǎng)度 |
calquarters | 日歷季度數(shù)長(zhǎng)度 | caldays | 日歷天數(shù)長(zhǎng)度 |
calmonths | 日歷月數(shù)長(zhǎng)度 | calendarDuration | 由數(shù)值創(chuàng)建日歷時(shí)間長(zhǎng)度數(shù)組 |
下面我們舉例來(lái)說(shuō)明如何創(chuàng)建日期和時(shí)間數(shù)組。
【例3-41】??日期時(shí)間數(shù)組創(chuàng)建。
例如,如果我們想要來(lái)表示這樣兩個(gè)日期:June 28, 2014 at 6 a.m和June 28, 2014 at 7 a.m,那么我們可以將這些數(shù)值相應(yīng)的賦值給datetime函數(shù)各元素即可:
>> t = datetime(2014,6,28,6:7,0,0)
t =
???28-Jun-2014 06:00:00 ??28-Jun-2014 07:00:00
如果想要對(duì)數(shù)組中的某一元素進(jìn)行修改,那么只需要將新的數(shù)值賦值給相應(yīng)的元素即可:
>> t.Day = 27:28
t =
???27-Jun-2014 06:00:00 ??28-Jun-2014 07:00:00
如果想要更改數(shù)組的顯示格式,只需要改變Format屬性即可。這一過(guò)程中改變的只是數(shù)據(jù)顯示格式,數(shù)據(jù)本身沒(méi)有任何改動(dòng)。
>> t.Format = 'MMM dd, yyyy'
t =
???Jun 27, 2014 ??Jun 28, 2014
如果你要將一個(gè)datetime數(shù)組減去另一個(gè)datetime數(shù)組,那么結(jié)果就是duration數(shù)組:
>> t2 = datetime(2014,6,29,6,30,45)
t2 =
???29-Jun-2014 06:30:45
>> d = t2 - t
d =
???48:30:45 ??23:30:45
在默認(rèn)情況下,duration數(shù)組顯示格式是“hours:minutes:seconds”。通過(guò)設(shè)置Format屬性,用戶可以改變顯示格式。例如可以改變?yōu)閱我粏挝弧靶r(shí)”,具體操作如下:
>> d.Format = 'h'
d =
???48.512 hrs ??23.512 hrs
用戶通過(guò)使用seconds、minutes、hours、days或?years函數(shù),也可以直接創(chuàng)建一個(gè)新的單一單位的duration數(shù)值。例如,創(chuàng)建一個(gè)2天的天數(shù)長(zhǎng)度,也就是正好等于24小時(shí)×2:
>> d = days(2)
d =
???2 days
用戶通過(guò)使用caldays、calweeks、calquarters和calyears函數(shù),也可以直接創(chuàng)建一個(gè)新的單一單位的calendar duration數(shù)值。例如,創(chuàng)建一個(gè)2個(gè)月的日歷天數(shù)長(zhǎng)度:
>> L = calmonths(2)
L =
???2mo
如果將一個(gè)calendar months 和一個(gè)calendar days數(shù)值相加,那么天數(shù)數(shù)值還將會(huì)分開(kāi)顯示,因?yàn)槊總€(gè)月的天數(shù)并不一致。除非是將其和一個(gè)具體的日期時(shí)間相加。
>> L = calmonths(2) + caldays(35)
L =
???2mo 35d
將一個(gè)calendar durations和一個(gè)datetime數(shù)組相加:
>> t2 = t + calmonths(2) + caldays(35)
t2 =
???Oct 01, 2014 ??Oct 02, 2014
此時(shí)得到的t2依然是一個(gè)datetime數(shù)組。
>> whos t2
??Name ?????Size ???????????Bytes ?Class ??????Attributes
??t2 ???????1x2 ??????????????161 ?datetime? ? ??
總的來(lái)說(shuō),有多種方式來(lái)表達(dá)日期和時(shí)間,MATLAB對(duì)于每一種都提供了方法(如圖3-7所示):
(1)表達(dá)時(shí)間點(diǎn),使用datetime數(shù)據(jù)格式。例如Wednesday, June 18, 2014 10:00:00。
(2)表達(dá)一段時(shí)間的長(zhǎng)度,采用固定時(shí)間長(zhǎng)度單位,使用duration數(shù)據(jù)類型。在使用此種類型的時(shí)候,1天總是等于24小時(shí)的,一年總是等于365.2425天的。例如:72 小時(shí)10分鐘。
(3)表達(dá)一段時(shí)間的長(zhǎng)度,采用可變時(shí)間長(zhǎng)度單位,使用calendarDuration數(shù)據(jù)類型。例如1個(gè)月可以是28、29、30或者31天。另外calendarDuration還考慮了夏令時(shí)和閏年,所以1天時(shí)間可以大于或者小于24小時(shí),1年可以是365天或者366天。
圖3-7??選擇需要導(dǎo)入的圖像文件
【例3-42】??指定時(shí)區(qū)與相關(guān)計(jì)算。
在對(duì)日期和時(shí)間的計(jì)算中,MATLAB還提供了時(shí)區(qū)設(shè)置選項(xiàng)。這樣我們只需在創(chuàng)建日期時(shí)間數(shù)組的時(shí)候指定好了時(shí)區(qū),那么就可以在不同時(shí)區(qū)之間進(jìn)行相關(guān)計(jì)算了,而不必人工換算中間有多少時(shí)差。下面我們就舉例來(lái)說(shuō)明如何來(lái)使用。
首先創(chuàng)建指定了時(shí)區(qū)的datetime數(shù)組:
>> t = datetime(2014,3,8:9,6,0,0,'TimeZone','local',...
????'Format','d-MMM-y HH:mm:ss Z')
t =
???8-Mar-2014 06:00:00 +0800 ??9-Mar-2014 06:00:00 +0800
在這里我們指定的是系統(tǒng)內(nèi)部的時(shí)區(qū)設(shè)置'local',返回的結(jié)果中“+0800”一項(xiàng)就是我們所處的時(shí)區(qū)和Coordinated Universal Time之間的時(shí)差。
用戶也可以指定時(shí)區(qū):
>> t.TimeZone = 'Asia/Tokyo'
t =
???8-Mar-2014 07:00:00 +0900 ??9-Mar-2014 07:00:00 +0900
同樣的方式我們可以定義另一個(gè)倫敦時(shí)間:
>> u = datetime(2014,3,9,6,0,0,'TimeZone','Europe/London',...
????'Format','d-MMM-y HH:mm:ss Z')
u =
???9-Mar-2014 06:00:00 +0000
兩個(gè)時(shí)間相減,就可以得到兩個(gè)時(shí)間點(diǎn)相差的實(shí)際時(shí)間:
>> dt = t - u
dt =
???-32:00:00 ???-8:00:00
【例3-43】??日期和時(shí)間序列的產(chǎn)生。
本例將來(lái)為讀者演示如何通過(guò)使用冒號(hào)(:)來(lái)產(chǎn)生日期和時(shí)間序列。
采用默認(rèn)步長(zhǎng)來(lái)產(chǎn)生序列,默認(rèn)步長(zhǎng)為1個(gè)日歷天。
>> t1 = datetime('01-Nov-2013 08:00:00');
t2 = datetime('05-Nov-2013 08:00:00');
t = t1:t2
t =
Columns 1 through 3
???01-Nov-2013 08:00:00 ??02-Nov-2013 08:00:00 ??03-Nov-2013 08:00:00
Columns 4 through 5
???04-Nov-2013 08:00:00 ??05-Nov-2013 08:00:00
用戶還可以指定步長(zhǎng):
>> t = t1:caldays(2):t2??????% ?使用caldays函數(shù)來(lái)指定2個(gè)日歷天為步長(zhǎng)
t =
???01-Nov-2013 08:00:00 ??03-Nov-2013 08:00:00 ??05-Nov-2013 08:00:00
>>t = t1:hours(18):t2????????% 使用18個(gè)小時(shí)作為步長(zhǎng)
t =
Columns 1 through 3
???01-Nov-2013 08:00:00 ??02-Nov-2013 02:00:00 ??02-Nov-2013 20:00:00
Columns 4 through 6
???03-Nov-2013 14:00:00 ??04-Nov-2013 08:00:00 ??05-Nov-2013 02:00:00
通過(guò)指定時(shí)區(qū)為紐約時(shí)間,t1所對(duì)應(yīng)時(shí)間正好在夏令時(shí)之前。
>> t1.TimeZone = 'America/New_York';
>> t2.TimeZone = 'America/New_York';
如果用戶這時(shí)使用1個(gè)日歷天為步長(zhǎng),那么這兩個(gè)時(shí)間點(diǎn)之間每天的時(shí)間長(zhǎng)度并不都是24小時(shí):
>> t = t1:t2;
>> dt = diff(t)
dt =
???24:00:00 ??25:00:00 ??24:00:00 ??24:00:00
如果將步長(zhǎng)設(shè)置為固定長(zhǎng)度的1天:
>> t = t1:days(1):t2
t =
Columns 1 through 3
???01-Nov-2013 08:00:00 ??02-Nov-2013 08:00:00 ??03-Nov-2013 07:00:00
Columns 4 through 5
???04-Nov-2013 07:00:00 ??05-Nov-2013 07:00:00
這時(shí)我們可以驗(yàn)證各時(shí)間點(diǎn)之間的長(zhǎng)度是否都等于24小時(shí):
>> dt = diff(t)
dt =
???24:00:00 ??24:00:00 ??24:00:00 ??24:00:00
【例3-44】??日期和時(shí)間序列的計(jì)算。
日期和時(shí)間序列可以像數(shù)組那樣進(jìn)行加減。
首先我們創(chuàng)建一個(gè)日期時(shí)間點(diǎn):
>> t1 = datetime('01-Nov-2013 08:00:00');
然后講一個(gè)固定長(zhǎng)度小時(shí)數(shù)組加到這一個(gè)時(shí)間點(diǎn)上:
>> t = t1 + hours(0:2)
t =
???01-Nov-2013 08:00:00 ??01-Nov-2013 09:00:00 ??01-Nov-2013 10:00:00
我們還可以加上一個(gè)日歷月份時(shí)間長(zhǎng)度:
>> t = t1 + calmonths(1:5)
t =
Columns 1 through 3
???01-Dec-2013 08:00:00 ??01-Jan-2014 08:00:00 ??01-Feb-2014 08:00:00
Columns 4 through 5
???01-Mar-2014 08:00:00 ??01-Apr-2014 08:00:00
上面結(jié)果中的每一個(gè)時(shí)間點(diǎn)都是當(dāng)月的第一天。如果我們要計(jì)算數(shù)組時(shí)間點(diǎn)之間的相隔天數(shù),我們可以使用以下命令:
>> dt = caldiff(t,'days')
dt =
???31d ??31d ??28d ??31d
如果要產(chǎn)生一個(gè)每月最后一天的日期序列,可以通過(guò)如下方法:
>> t = datetime('31-Jan-2014') + calmonths(0:11)
t =
Columns 1 through 5
???31-Jan-2014 ??28-Feb-2014 ??31-Mar-2014 ??30-Apr-2014 ??31-May-2014
Columns 6 through 10
???30-Jun-2014 ??31-Jul-2014 ??31-Aug-2014 ??30-Sep-2014 ??31-Oct-2014
Columns 11 through 12
???30-Nov-2014 ??31-Dec-2014
總結(jié)
以上是生活随笔為你收集整理的convert.todatetime指定日期格式_MATLAB的时间与日期的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 人类附身机器人获得永生_脑机接口先驱尼古
- 下一篇: python类中变量作用域_Python