5

文字列を日時に解析しようとすると、上記のエラーが発生する次の C# があります。

DateTime backupdate = System.Convert.ToDateTime(imageflowlabel.Text);   
DateTime currentdate = System.DateTime.Now.AddHours(-2);    
int result = currentdate.CompareTo(backupdate);

imageflowlable.textこのように見えます2012-04-15 15:23:34:123

これを変換する方法についてのアイデアはありますか?

ありがとう

4

5 に答える 5

6

はい - "DateTime.ParseExact()" または "TryParseExact()" をカスタム フォーマット文字列と共に使用します。

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

DateTime currentdate;
int result;
try
{
  // EXAMPLE: 2012-04-15 15:23:34:123 
  DateTime backupdate =
     DateTime.ParseExact (
       "yyyy-MM-dd HH:mm:ss:fff", //mind the casing
       imageflowlabel.Text, 
       CultureInfo.InvariantCulture);
  currentdate = System.DateTime.Now.AddHours(-2);    
  result = currentdate.CompareTo(backupdate);
}
catch (Exception ex)
{
  ...
于 2012-05-16T19:26:49.433 に答える
4

問題は、dateTime 文字列の時間部分にあります。文字列が「2012-04-15 15:23:34.123」の場合は機能します。文字列を変更して、最後のコロンをピリオドに置き換えると、修正されます。

于 2012-05-16T19:33:58.513 に答える
1

あなたのコードは正しいようです。問題はおそらく文字列形式にあり、その最後:は実際には a .(小数秒の開始を示す) である必要があります。

Incorrect: 2012-04-15 15:23:34:123
Correct:   2012-04-15 15:23:34.123

Convert.ToDateTime("2012-04-15 15:23:34.123")正常に動作します。

于 2012-05-16T19:33:20.230 に答える
0

ユーザーが自分でその値を編集する方法がないと仮定すると、ParseExactが機能するはずです。その場合、必要でない限り、TryParseExactFormatExceptionを使用する必要があります。

var toParse = "2012-04-15 15:23:34:123";

var parsed = DateTime.ParseExact(toParse, "yyyy-MM-dd HH:mm:ss:fff", null);

Assert.AreEqual(new DateTime(2012, 4, 15, 15, 23, 34, 123), parsed);
于 2012-05-16T19:33:04.153 に答える
0

DateTime.Parse、DateTime.ParseExact、または Convert.ToDateTime を使用するなど、この質問で概説されている状況を解決するためのいくつかの回答を見てきました。問題が矛盾しているように見える理由を特定しようとしています。SQL Server 2008 R2 バックエンドを備えた Microsoft Enterprise Library Software Factory を使用してアプリケーションを構築し、現在約 9 か月間実稼働しています。C# からストアド プロシージャの System.Data.DBType.DateTime パラメーターに DateTime プロパティ値を割り当てる、同じコード形式のインスタンスが少なくとも 20 あります。20 個のコード ブロックのうち 19 個が正常に動作します。この質問で言及されているエラーを解決するには、以下に示すように .ToString() 呼び出しを追加する必要がありました。

db.AddInParameter(command, "beginDT", DbType.DateTime, timeBlock.BeginDT.ToString());

では、20 番目ではなく、19 の完全に同一のインスタンスで正常に機能する理由について、誰かが何らかの洞察を持っていますか? これらのオブジェクトの相互関係をより理解しようとしているだけなので、堅実なコードを構築できます。その後、他のすべてのインスタンスに戻り、.ToString() 呼び出しを追加しました。ただし、回帰テストは完了していません。だから、それが間違いだったのかどうかはわかりません。

于 2012-06-13T06:12:33.690 に答える