好的,所以我已经醒了太久了。生气。请有人告诉我为什么这不起作用。传递到Substring(0,4)
时,诸如“201212120600”的字符串返回“201”而不是“2012”。我的大脑正在融化。
private DateTime StringToDateTimeUTC(String s)
{
System.Diagnostics.Debug.WriteLine(s);
String syear = s.Substring(0, 4);
System.Diagnostics.Debug.WriteLine(syear);
int year = int.Parse(s.Substring(0, 4));
int month = int.Parse(s.Substring(4, 2));
int day = int.Parse(s.Substring(6, 2));
int hour = int.Parse(s.Substring(8, 2));
int minute = int.Parse(s.Substring(10, 2));
DateTime dt = new DateTime(year, month, day, hour, minute, 0, DateTimeKind.Utc);
return dt;
}
输出结果为:
201212120600
201
答案 0 :(得分:8)
我认为你的字符串中确实有一个空格:
string s = " 201212120600";
Console.WriteLine(s);
String syear = s.Substring(0, 4);
Console.WriteLine(syear);
int year = int.Parse(s.Substring(0, 4));
Console.WriteLine(year);
输出:
201212120600
201
201
答案 1 :(得分:5)
当我将此代码粘贴到VS并运行它时,我得到了预期的输出:
201212120600
2012
请注意,使用DateTime.ParseExact()
:
// using System.Globalization;
DateTime dt = DateTime.ParseExact(
s,
"yyyyMMddHHmm",
CultureInfo.CurrentCulture.DateTimeFormat,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
...会将dt
设置为您要返回的相同内容。
答案 2 :(得分:3)
除非你只是为了好玩,否则已经有了一个.NET功能来做你想做的事情;
DateTime dt = DateTime.ParseExact("201212120600", "yyyyMMddhhmm", null);
答案 3 :(得分:2)
您传入的字符串必须不正确,因为您提供的方法正常
答案 4 :(得分:1)
如何将字符串输入到函数中?
我的猜测是,你得到它的任何来源都是在字符串中引入隐藏的字符。尝试捕获字符串,然后将其粘贴到显示隐藏字符(如Notepad ++)的内容中。