将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-需要解释吗?