0

私はこの文字列を持っています:「14。januar 20139:15:00EST」。

私が理解していることから、フォーマットは次のとおりです。MMMM yyyy H:mm:ss ESTですが、次のコードを試しましたが、何も機能しません。私はここで何が間違っているのですか?

    private static string[] _dateFormats = new[] {
            @"d. MMMM yyyy H:mm:ss \E\S\T",
            @"d. MMMM yyyy h:mm:ss \E\S\T",
            @"d. MMMM yyyy H:mm:ss E\S\T",
            @"d. MMMM yyyy h:mm:ss E\S\T",
            @"d. MMMM yyyy H:mm:ss EST",
            @"d. MMMM yyyy h:mm:ss EST",
            @"dd-MM-yyyy HH:mm:ss"
        };

    private static DateTimeStyles _styles = DateTimeStyles.AllowLeadingWhite
        | DateTimeStyles.AllowInnerWhite
        | DateTimeStyles.AllowTrailingWhite
        | DateTimeStyles.AllowWhiteSpaces;

    DateTime dt;
    DateTime.TryParseExact(dateTime, _dateFormats, CultureInfo.InvariantCulture, _styles, out dt);

アップデート:

デンマークのCultureInfoを使用することでうまくいきました。ただし、これも機能しません:Tir、2013年1月15日11:00:00

DateTime.TryParseExact(test, @"ddd, dd MMM yyyy HH:mm:ss", CultureInfo.GetCultureInfo("da-DK"), _styles, out dt);

Tirは、火曜日または「火曜日」と同じです。なぜ認識されないのですか?

基本的に、RSSフィードの監視に使用されるやや不正な形式の日時文字列の負荷を解析しようとしています。多くのRSSフィードは検証されませんが、これを変更することはできないので、とにかくそれらを解析するための優れた方法が必要です。ただし、フィードアイテムが解析されるときに、現在の時刻を一種のガイドラインとして使用することについては、1時間よりもはるかに古いものであってはなりません。これは、正しいタイムゾーンがないことを、前の1時間の最新の分に設定できることを意味します。

例えば。次の日時文字列を取得します:Tir、2013年1月15日11:15:00。タイムゾーンは示されていませんが、フィードアイテムは14:18 UTCに抽出されるため、14:15UTCに公開される可能性があります。

この質問は、やや些細なバグ修正として始まりましたが、これにどのように取り組むかについての質問である可能性が高いです。誰か良いアイデアはありますか?

ありがとう。

4

1 に答える 1

1

「EST」タイムゾーンインジケーターを取り除く必要があります。それらは互換性がなく、非常にあいまいです。EST は、米国 (UTC-5) とオーストラリア (UTC+10) の両方で東部標準時になります。CST は 5 つの異なるタイムゾーンを備えています。String.SubString() を使用して削除する必要があります。

それ以外の場合、文字列はデンマークの日付の標準形式であり、ParseExact() は必要ありません。これは私のen-USマシンでうまくいきました:

var ci = System.Globalization.CultureInfo.GetCultureInfo("da-DK");
var s = "14. januar 2013 9:15:00";
var dt = DateTime.Parse(s, ci.DateTimeFormat);
于 2013-01-15T12:46:39.663 に答える