Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#,将字符串转换为DateTimeOffset_C#_Datetimeoffset_Tryparse - Fatal编程技术网

C#,将字符串转换为DateTimeOffset

C#,将字符串转换为DateTimeOffset,c#,datetimeoffset,tryparse,C#,Datetimeoffset,Tryparse,我正在尝试将字符串转换为DateTimeOffset。下面是我的字符串示例2017/010/23:51:502017代表010年代表一年中的某一天,23:51:50代表时间。 我正在以下面的方式尝试,但无论输入是什么,它总是返回我0001-01-01 00:00:00.0000000+00:00。 我的代码 有什么建议吗 更新 为了简单起见,我没有把问题拖得太久。我的日期时间我从.txt文件的名称和日期时间(010/23:51:50有些内容有偏移,有些内容没有偏移)中获得年份(2017,可能是2

我正在尝试将字符串转换为DateTimeOffset。下面是我的字符串示例
2017/010/23:51:50
2017代表010年代表一年中的某一天,23:51:50代表时间。 我正在以下面的方式尝试,但无论输入是什么,它总是返回我
0001-01-01 00:00:00.0000000+00:00
。 我的代码

有什么建议吗

更新 为了简单起见,我没有把问题拖得太久。我的日期时间我从
.txt
文件的名称和日期时间(
010/23:51:50
有些内容有偏移,有些内容没有偏移)中获得年份(
2017,可能是2002、2001
)。所以我的输入并不总是一样的。希望这能澄清

通过查看,我认为您无法解析格式
Year/JulianDay/Time
。您可以将字符串拆分为多个部分,然后将日期添加到一年中

string[] parts = year.Split('/');
DateTime dt = new DateTime(int.Parse(parts[0]), 1, 1); 
dt = dt.AddDays(int.Parse(parts[1]) - 1).Add(TimeSpan.Parse(parts[2]));
通过查看,我认为您无法解析格式
Year/JulianDay/Time
。您可以将字符串拆分为多个部分,然后将日期添加到一年中

string[] parts = year.Split('/');
DateTime dt = new DateTime(int.Parse(parts[0]), 1, 1); 
dt = dt.AddDays(int.Parse(parts[1]) - 1).Add(TimeSpan.Parse(parts[2]));

首先按/拆分字符串,然后使用DayOfYear值和year来获取年/月/日。接下来拆分时间参数并使用它获取TimeSpan,并将其添加到以前获取的日期。接下来,只需解析新获得的date-to-DateTimeOffset。此代码应适用于:

        string year = ("2017/010/23:51:50");
        var date = year.Split('/');
        var timeSpanVal = date[2].ToString().Split(':').Select(x=>Convert.ToInt32(x)).ToList();
        TimeSpan ts = new TimeSpan(timeSpanVal[0], timeSpanVal[1], timeSpanVal[2]);
        DateTime newDate = new DateTime(Convert.ToInt32(date[0]), 1, 1).AddDays(Convert.ToInt32(date[1]) - 1)+ts;

        DateTimeOffset.TryParse(newDate.ToString(), out DateTime);

首先按/拆分字符串,然后使用DayOfYear值和year来获取年/月/日。接下来拆分时间参数并使用它获取TimeSpan,并将其添加到以前获取的日期。接下来,只需解析新获得的date-to-DateTimeOffset。此代码应适用于:

        string year = ("2017/010/23:51:50");
        var date = year.Split('/');
        var timeSpanVal = date[2].ToString().Split(':').Select(x=>Convert.ToInt32(x)).ToList();
        TimeSpan ts = new TimeSpan(timeSpanVal[0], timeSpanVal[1], timeSpanVal[2]);
        DateTime newDate = new DateTime(Convert.ToInt32(date[0]), 1, 1).AddDays(Convert.ToInt32(date[1]) - 1)+ts;

        DateTimeOffset.TryParse(newDate.ToString(), out DateTime);

当你说一年中的某一天,你的意思是从1到365吗?它返回了false,千万不要忽略它。使用Parse()来保持诚实。您是正确的@ofirwinegarten为什么要使用
DateTimeOffset
?日期字符串不包含偏移量信息。它是UTC格式的吗?当你说一年中的某一天时,它可能是重复的,你的意思是从1到365吗?它返回false,永远不要忽略它。使用Parse()来保持诚实。您是正确的@ofirwinegarten为什么要使用
DateTimeOffset
?日期字符串不包含偏移量信息。它是UTC格式的吗?可能的重复项不需要经过字符串即可从
DateTime
转换为
DateTimeOffset
。但是,您确实需要知道要使用的偏移量。从
DateTime
转换到
DateTimeOffset
不需要遍历字符串。但是,您确实需要知道要使用的偏移量。