-2

好吧,我已经醒太久了。快疯了。请有人告诉我为什么这不起作用。传入“201212120600”之类的字符串Substring(0,4)返回“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

4

5 回答 5

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
于 2012-12-20T00:59:30.790 回答
5

当我将此代码粘贴到 VS 中并运行它时,我得到了预期的输出:

201212120600
2012

请注意,您可以使用以下方法更轻松地实现相同的目标DateTime.ParseExact()

// using System.Globalization;
DateTime dt = DateTime.ParseExact(
    s,
    "yyyyMMddHHmm",
    CultureInfo.CurrentCulture.DateTimeFormat,
    DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);

...将设置dt为您要返回的相同内容。

于 2012-12-20T00:56:14.293 回答
3

除非你只是为了好玩,否则已经有一个 .NET 函数可以做你想做的事;

DateTime dt = DateTime.ParseExact("201212120600", "yyyyMMddhhmm", null);
于 2012-12-20T00:56:52.603 回答
2

您传入的字符串必须不正确,因为您提供的方法可以正常工作

在此处输入图像描述

于 2012-12-20T00:56:13.117 回答
1

您如何将字符串输入到函数中?

我的猜测是,无论您从哪个来源获得它,都是在字符串中引入隐藏字符。尝试捕获字符串,然后将其复制粘贴到显示隐藏字符的内容中,例如 Notepad++。

于 2012-12-20T01:01:04.727 回答