前情提要:我要用Filter Data Table(UiPath.Core.Activities.FilterDataTable)把指定日期找出來extract出來,結果呢...不能用0.0
所以就產生這篇對Date Format的小小研究!
可能谷歌關鍵字搜尋:
- replace excel datetime to string uipath
- convert to excel date uipath
- string was not recognized as a valid datetime. uipath
- change format in excel uipath
- count between two dates uipath
Let's get started!
常常會想要知道現在時間是什麼,這個時候要用Assign(System.Activities.Statements.Assign)功能。
據說UiPath的DateTime是從VB.Net產生而來(https://docs.microsoft.com/zh-tw/dotnet/api/system.datetime),傳統的"yyyy/MM/dd HH:mm:ss"的格式也是依照此規則。
基礎題
最常大家想要用的是"現在的時間",通常會用(其一):
System.DateTime.Now
System.DateTime.Today
注意:這(指A)通常是個DateTime的變數,如果沒有找到可以在
Variables>Variable Type>Browse for Types>打入"System.DateTime"找到
Variables>Variable Type>Browse for Types>打入"System.DateTime"找到
當然很多人比較喜歡把它換成String,就可以利用.ToString:
System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")
進階題
那有人就會問了,如果是要做"今日日期時間的加減",可以運用.AddDays():
System.DateTime.Now.AddDays("加減天數").ToString("yyyy/MM/dd hh:mm:ss")
舉例來說:
要算前天(今天-2天)日期時間:System.DateTime.Now.AddDays(-2)
要算3周(7*3)後的日期時間:System.DateTime.Now.AddDays(21)
註:即使最後格式("yyyy/MM/dd:)沒有包含小時分鐘秒數,系統都會把它算進去!!
這時有人就抱怨了,如果是要做"指定日期時間的加減",怎麼辦?
過程會多一個步驟
- 先設S = "指定的日期"(String Type)
- 再用DateTime.Parse(), A = "轉換的日期"(DateTime Type)
DateTime.ParseExact("指定日期字串", "dd-MMM-yyyy",System.Globalization.CultureInfo.InvariantCulture) - 最後再把.AddDays()放入
進階題+1
大家做完日期時間的加減乘除,會發現,會有譬如說12:31:22(12點31分22秒)這種零碎的數字,但如果不要有其他時間,只要00:00:00的時間:
用.AddHours(-DateTime.Now.Hour).AddMinutes(-DateTime.Now.Minute).AddSeconds(-DateTime.Now.Second) 把它剪掉即可
以下:
格式1
String.Format("{0:yyyy/MM/dd HH:mm:ss}", DateTime.Now.AddDays("加減天數").AddHours(-DateTime.Now.Hour).AddMinutes(-DateTime.Now.Minute).AddSeconds(-DateTime.Now.Second))
或是這個格式2
DateTime.Now.AddDays("加減天數").AddHours(-DateTime.Now.Hour).AddMinutes(-DateTime.Now.Minute).AddSeconds(-DateTime.Now.Second).ToString(“MM/dd/yyyy HH:mm:ss”)
註:M是代表Month,一定要大寫! MMM會出現英文
註:HH大寫是24小時表示法、hh小寫是12小時表示法
延伸:可以加減Day,也可以加減Month!!
進階題+2
除了日期時間的加減,另外還有"兩個日期之間的差異"!!這時運用的是DateDiff():
DateDiff function:計算時間差異
DateDiff(DateInterval(時間間距), "第一個日期","第二個日期")
另外一種方法(比較不推薦)
"第二個日期".Subtract("第一個日期")
註:"第一個日期"、"第二個日期"都是DateTime Type
以下舉例:
要把今日日期與指定日期算時間差異
DateDiff(DateInterval.Day,DateTime.ParseExact("指定日期字串", "dd-MMM-yyyy", System.Globalization.CultureInfo.InvariantCulture),DateTime.now())
註:這個是要先把"指定日期字串"轉換成一定格式,在與當日日期做比較
更新版(實際數字):
DateDiff(DateInterval.Day,DateTime.ParseExact("01-01-1990", "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture),DateTime.Now.AddDays(0))
科普點:
Excel本身有兩個Start Date分別是The 1900 date system和The 1904 date system。而如果把日期轉換為通用格式,可以得到一個Serial number,計算那個日期相對於Start Date有多少天。
以上應該夠用了,如果有其他問題可以再跟我討論哈哈!!
feat.這次沒有講到Filter DataTable的部分...
參考文獻:
https://www.rpahiroba.com/2018/06/24/uipath%E3%81%A7%E5%B9%B4%E6%9C%88%E6%97%A5%E3%82%92%E5%8A%A0%E5%B7%A5%E3%81%97%E3%82%88%E3%81%86/
https://www.dotnetperls.com/datetime
https://www.dotnetperls.com/datetime
SHARE AND LIKE IF IT HELPS
沒有留言:
張貼留言