0

私は次の文字列を持っています:

Updated: 15:14 03/10

SQLサーバー内の日時フィールドに挿入するために日時形式に変換したいと思います。

string date = 'Updated: 15:14 03/10';
    string updatedTime = date.Split(' ')[0];
    string updatedDate = date.Split(' ')[1];
    string updatedMonth = updatedDate.Split('/')[1];
    string updatedDay = updatedDate.Split('/')[0];
    string updatedYear = DateTime.UtcNow.Year.ToString();
    string updated = updatedYear + '-' + updatedMonth + '-' + updatedDay + ' ' + updatedTime;
DateTime dt = Convert.ToDateTime(updated);

これを行うためのよりクリーンで効率的な方法はありますか?

4

2 に答える 2

5

DateTime.ParseExact正しいフォーマット文字列で使用できます。このようなもの:

string date = "Updated: 15:14 03/10";
string modifiedDate = date.Replace("Updated: ", "");
string format = "HH:mm dd/MM";
DateTime parsedDate = DateTime.ParseExact(modifiedDate, format, CultureInfo.CurrentCulture);

編集実際には、フォーマット文字列に年は必要ありません。DateTimeパーサーは、現在の年を想定するのに十分スマートです。

編集#2生意気になりたい場合は、フォーマット文字列に「更新済み」の部分を含めることができます。ただし、、、、およびの文字dをエスケープする必要があるため、少し醜いです。t:

string date = "Updated: 15:14 03/10";
string format = @"Up\da\te\d\: HH:mm dd/MM";
DateTime parsedDate = DateTime.ParseExact(date, format, CultureInfo.CurrentCulture);
于 2012-10-03T17:15:54.177 に答える
3

それはいつもその形ですか?もしそうなら、それはあなたがすることができるはずであるように見えます:

string trimmed = text.Substring("Updated: ".Length);
DateTime dateTime = DateTime.ParseExact(trimmed, "HH:mm dd/MM",
                                        CultureInfo.InvariantCulture);

これも機能する可能性がありますが、私は試していません。

DateTime dateTime = DateTime.ParseExact(text, "'Updated: 'HH:mm dd/MM",
                                        CultureInfo.InvariantCulture);

ちなみに、結果がローカルであるかUTCであるかは明確ではありません。さまざまなオプションを、で指定できますDateTimeStyles

于 2012-10-03T17:17:04.483 に答える