-2

さて、私はあまりにも長い間起きていました。気が狂う。これがうまくいかない理由を誰か教えてください。"201212120600" などの文字列を に渡すと、Substring(0,4)"2012" ではなく "201" が返されます。私の脳は溶けています。

    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

関数に入力される文字列をどのように取得していますか?

私の推測では、取得元が何であれ、文字列内に隠し文字が導入されていると思います。文字列をキャプチャしてから、メモ帳 ++ などの隠し文字を表示するものにコピーして貼り付けてみてください。

于 2012-12-20T01:01:04.727 に答える