我正試圖實作DICOM規范對DateTime的決議。該標準規定:
格式為:
的串聯日期-時間字串。YYYYMMDDHHMMSS.FFFFFF&ZZXX
這個字串的組成部分,從左到右,是YYYY=年,MM=月,DD=日,HH=小時(范圍 "00"-"23"),MM=分鐘(范圍 "00"-"59"),SS=秒(范圍 "00"-"60")。
FFFFFF = 小數秒,包含小至百萬分之一秒的小數部分(范圍 "00000000"-"999999")。
&ZZXX是一個可選的后綴,用于偏移協調世界時(UTC),其中&=" "或"-",ZZ=小時和XX=分鐘的偏移。
到目前為止,我所能想到的是
DateTime.ParseExact(str, "yyyyMMddHmmss.FFFFF", CultureInfo.InvariantCulture) 。
我已經成功地用以下方法進行了測驗:
var dateTimeValueStr = "20010301125745.490000"/span>。
而且
var dateTimeValueStr = "20010301125745"/span>。
然而,我無法理解關于如何實作從協調世界時(UTC)偏移的可選后綴的決議的檔案。似乎'zz'只適用于明確的冒號':'。而且我不能使用類似" hhmm"的東西,因為在同一個格式字串中會有多個'h'模式。
Q:
是否有辦法通過呼叫DateTime.ParseExact來讀取這個DICOM DateTime?還是我需要單獨呼叫DateTime.ParseExact來讀取DateTime(無時區),然后再呼叫TimeSpan.ParseExact來決議時區資訊(見這里)。
典型的例子:
var dateTimeValueStr = "20010301125745.490000-0500"/span>。
uj5u.com熱心網友回復:
你可以嘗試在一個DateTime.ParseExact中提供幾種格式:
static DateTime MyParse(string value) => DateTime. ParseExact(
value,
new string[ ] {
"yyyMMddHHmmss.FFFFF"。
"yyyMMddHHmmss.FFFFFzzz"。
},
CultureInfo.InvariantCulture,
DateTimeStyles.AdjustToUniversal)。)
演示:
string[] tests = new string[] {
"20010301125745.490000",
"20010301125745.490000-0500",
"20010301125745.490000 0000",
"20010301125745.490000-0000",
"20010301125745.490000 0700",
};
string report = string.Join(Environment.NewLine, tests
.Select(test => $"{test,30} => {MyParse(test):yyyy-MM-dd HH:mm:ss})。
Console.Write(report)。
結果:
20010301125745. 490000 => 20010301 12: 57: 45
20010301125745. 490000-0500 => 2001-03-01 17。 57: 45
20010301125745. 490000 0000 => 20010301 12: 57: 45
20010301125745. 490000-0000 => 2001-03-01 12: 57: 45
20010301125745. 490000 0700 => 20010301 05。 57:45.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/311915.html
標籤:
