1
 string value =     "Sat Apr 28 2012 11:00:00 GMT-0400 (Eastern Daylight Time)"

日時に変換する必要があります

私はやってみました:

 DateTime datetime = DateTime.ParseExact(value, "MM/dd/yyyy hh:mm", null);

また

 DateTime datetime2 = Convert.ToDateTime(value);

例外: 文字列が有効な DateTime として認識されませんでした。

4

5 に答える 5

3

次のことを試してください。

Convert.ToDateTime("Sat Apr 28 2012 11:00:00 GMT-0400 (Eastern Daylight Time)".Substring(4, 20))
于 2012-04-17T19:11:33.360 に答える
3

「MM/dd/yyyy hh:mm」の形式を指定していますが、文字列はその形式ではありませ

「GMT-0400 (Eastern Daylight Time)」の部分に問題があると思われます。残りは「ddd MMM dd yyyy HH:mm:ss」または「ddd MMM d yyyy HH:mm:ss」の形式になっています。 "月日番号が常に 2 桁ではない場合。

UTC からのオフセットを個別にDateTimeOffset解析し、最初の部分 (GMT の前) を未指定 DateTimeとして解析し、オフセットを解析することをお勧めします。編集:オフセットを解析できTimeSpan.ParseExactますが、自分で記号を処理する必要があると思います-そのように負のタイムスパンを解析する文書化された方法は見当たりません:(

編集:私の野田時間プロジェクトで、たとえば「'GMT'+HHmm」のパターンを使用してオフセット部分を解析できることに注意してください-そして明らかに私たちはその部分に対処しLocalDateTimeます-しかし、それでも異なる部分を分離する必要があります互いに文字列の部分。サンプルコード:

using System;
using System.Linq;
using System.Xml.Linq;
using NodaTime;
using NodaTime.Text;

public class Test
{
    static void Main()
    {
        string text = "Sat Apr 28 2012 11:00:00 GMT-0400 (Eastern Daylight Time)";
        ZonedDateTime parsed = Parse(text);
        Console.WriteLine(parsed);
    }

    static readonly LocalDateTimePattern LocalPattern =
        LocalDateTimePattern.CreateWithInvariantInfo("ddd MMM d yyyy HH:mm:ss");

    // Note: Includes space before GMT for convenience later
    static readonly OffsetPattern OffsetPattern =
        OffsetPattern.CreateWithInvariantInfo("' GMT'+HHmm");

    static ZonedDateTime Parse(string text)
    {
        int gmtIndex = text.IndexOf(" GMT");
        int zoneIndex = text.IndexOf(" (");
        // TODO: Validation that these aren't -1 :)

        string localText = text.Substring(0, gmtIndex);
        string offsetText = text.Substring(gmtIndex, zoneIndex - gmtIndex);

        var localResult = LocalPattern.Parse(localText);
        var offsetResult = OffsetPattern.Parse(offsetText);

        // TODO: Validate that both are successful

        var fixedZone = DateTimeZone.ForOffset(offsetResult.Value);        
        return localResult.Value.InZoneStrictly(fixedZone);
    }
}

ZonedDateTimeこれは、実際には東部時間ではなく、固定のタイムゾーンでを与えることに注意してください。現在、ノダタイムには がありませんOffsetDateTime。これは、ここに自然に適合します...

于 2012-04-17T19:05:23.187 に答える
2

文字列が形式と一致しません。

変換する前に、その文字列を少し解析する必要があります。たとえば、「2012 年 4 月 28 日 11:00:00」は解析できます。ただし、残りの部分は自分で変換する必要があります。

文字列のように、UTC に相対的な時間を保持できるため、DateTimeOffset documented hereの使用を検討することをお勧めします。

これはドキュメントであり、あなたが持っているものにかなり近いことがわかりました

// Parse date and time with custom specifier.
dateString = "Sun 15 Jun 2008 8:30 AM -06:00";
format = "ddd dd MMM yyyy h:mm tt zzz";
try
{
    result = DateTimeOffset.ParseExact(dateString, format, provider);
    Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("{0} is not in the correct format.", dateString);
} 
于 2012-04-17T19:08:55.933 に答える
1

試すddd MMM d yyyy hh:mm:ss zzz

うまくいかない場合は、これを試してください

于 2012-04-17T19:08:35.497 に答える
1

Custom Date and Time Format Strings を見ると、この形式の変形に過ぎません。

"ddd MMM dd yyyy h:mm:ss zzz"

その中にいくつかの余分な部分があるだけです:

"ddd MMM dd yyyy h:mm:ss GMTzzz (blah blah blah)"

それらに対処すれば、問題ないはずです。

value = value.Remove(value.IndexOf(" ("));
DateTime datetime = DateTime.ParseExact(value, "ddd MMM dd yyyy hh:mm:ss \"GMT\"zzz", null);
于 2012-04-17T19:17:47.980 に答える