首页 文章

String.Substring古怪[关闭]

提问于
浏览
-2

好的,所以我've been awake too long. Going mad. Please someone tell me why this doesn'工作 . 传递到 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

5 回答

  • 2

    我认为你的字符串中确实有一个空格:

    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

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

    201212120600
    2012
    

    请注意,使用 DateTime.ParseExact() 可以更轻松地实现此目标:

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

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

  • 5

    除非你只是为了好玩而这样做,否则已经有了一个.NET功能来做你想要的事情;

    DateTime dt = DateTime.ParseExact("201212120600", "yyyyMMddhhmm", null);
    
  • 8

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

    enter image description here

  • 3

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

    我的猜测是,你得到它的任何来源都是在字符串中引入隐藏的字符 . 尝试捕获字符串,然后将其粘贴到显示隐藏字符(如记事本)的内容中 .

相关问题