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