将20141013T155544.673-04/0转换为日期时间C#
我需要转换将20141013T155544.673-04/0转换为日期时间C#,c#,C#,我需要转换 20141013T155544.673-04/0 到日期时间类型 目前,我正在手动解析字符串 //20130605T154727.683-04/0 //20130806T143808.018-04 //var a = new DateTime(); var year = segmentDate[0].ToString(CultureInfo.InvariantCulture) + se
20141013T155544.673-04/0
到日期时间类型
目前,我正在手动解析字符串
//20130605T154727.683-04/0
//20130806T143808.018-04
//var a = new DateTime();
var year = segmentDate[0].ToString(CultureInfo.InvariantCulture) + segmentDate[1].ToString(CultureInfo.InvariantCulture) + segmentDate[2].ToString(CultureInfo.InvariantCulture) + segmentDate[3].ToString(CultureInfo.InvariantCulture);
var month = segmentDate[4].ToString(CultureInfo.InvariantCulture) + segmentDate[5].ToString(CultureInfo.InvariantCulture);
var day = segmentDate[6].ToString(CultureInfo.InvariantCulture) + segmentDate[7].ToString(CultureInfo.InvariantCulture);
//s[8] == "T";
var hours = segmentDate[9].ToString(CultureInfo.InvariantCulture) + segmentDate[10].ToString(CultureInfo.InvariantCulture);
var minutes = segmentDate[11].ToString(CultureInfo.InvariantCulture) + segmentDate[12].ToString(CultureInfo.InvariantCulture);
var seconds = segmentDate[13].ToString(CultureInfo.InvariantCulture) + segmentDate[14].ToString(CultureInfo.InvariantCulture);
string milliseconds = null;
if (segmentDate.Contains("."))
milliseconds = segmentDate.Split('.')[1].Split('-')[0];
if (milliseconds != null && milliseconds.Contains((" ")))
{
milliseconds = milliseconds.Split(' ')[0];
}
var offset = Convert.ToInt32(segmentDate.Split('-')[1].Split('/')[0]);
var a = new DateTime(Convert.ToInt32(year), Convert.ToInt32(month),
Convert.ToInt32(day), Convert.ToInt32(hours), Convert.ToInt32(minutes),
Convert.ToInt32(seconds), Convert.ToInt32((milliseconds ?? "0"))).AddHours(offset);
但这是一个坏主意——我不能相信这种格式在什么地方没有被指定(我已经找到了)
感谢您的帮助
谢谢大家!
更新
4 digit year
2 digit month
2 digit day
T - denotes start of the time portion
2 digit hour
2 digit minute
2 digit second
. - denotes start of MS
3 digit ms
TZ offset (-04)
/0 I believe is offset minutes
更新2
因此,我一直在使用TryParseExact和ParseExact,但无法找到一个格式字符串将其转换为DateTime/DateTimeOffset类型
我还咨询了这个值的供应商,他们也有一个手动过程来解析它,就像我已经发布的那样
我不能接受这是实现预期结果的唯一途径,因此,我将继续利用它
但是,如果其他人有建议,欢迎来到这里。这里是我得到的最接近的建议:
string s = "20141013T155544.673-04/0";
var dt = DateTime.ParseExact(s,"yyyyMMddTHHmmss.fffzz/0",CultureInfo.InvariantCulture);
如果/0
表示分钟(可以是0或30),则可以进行一些操作,将其转换为“标准”时区指示器:
string s = "20141013T155544.673-04/30";
string s2 = s.Replace("/0",":00").Replace("/30",":30");
var dt = DateTime.ParseExact(s2,"yyyyMMddTHHmmss.fffzzz",CultureInfo.InvariantCulture);
您是否尝试过使用
DateTime.TryParseExact
?您知道.673之后的部分应该是什么吗?@DanielA.White-现在就试用它-lenniep-这是Offsetry用来制作您自己的日期时间格式,然后尝试DateTime.TryParseExact
或DateTime.ParseExact
@Downvoter-需要解释吗?