0

関数内で、2つの日付の違いを秒単位で見つける必要があります。差が30秒を超える場合は、Falseを返します。それ以外の場合は、 Trueを返します。最初の値はデータベースから読み取り、2番目の値は現在のDateTime.Nowです。

これが私が使用しているコードの断片でdr.GetValue(0).ToString()、データベースに現在の値を保持しながら作業を行います。

if (dr.Read())
            {

                DateTime nowDate = Convert.ToDateTime(DateTime.Now.ToString("M/dd/yyyy H:mm:ss tt"));
                DateTime then = DateTime.ParseExact(dr.GetValue(0).ToString(), "M/dd/yyyy H:mm:ss tt", CultureInfo.InvariantCulture);

                TimeSpan diff = nowDate - then;

                int timeDifference = diff.Seconds;


                if (timeDifference > 30)
                {
                    myConn.Dispose();
                    return false;
                }
                else {
                    myConn.Dispose();
                    return true;
                }
            }

上記のコードを実行すると、メッセージエラーが発生します:
string was not recognized as valid DateTime

そして、これがエラーの原因となっている行です:

 DateTime then = DateTime.ParseExact(dr.GetValue(0).ToString(), "M/dd/yyyy H:mm:ss tt", CultureInfo.InvariantCulture);

時刻は次の形式でデータベースに保存されます。2013-02-18 14:06:37

しかし、次の行を実行すると(デバッグ目的で):

MessageBox.Show(dr.GetValue(0).ToString());

次の形式で日付を示すメッセージボックスが表示されます。2/18/2013 2:06:37 PM

現在の時刻とdr.GetValue(0).ToString()に保存されている時刻の差を秒単位で見つける方法

どんな助けでも大歓迎です

4

4 に答える 4

3

あなたがしたいh、ではありませんHhは 12 時間形式Hの時間、 は 24 時間形式の時間です。あなたの例の時間は2 PM(not 14 PM) であるため、必要な 12 時間形式です。

また:

  • 現在時刻を文字列に変換して元に戻しています - 気にしないでください!
  • あなたは数えSecondsていませんTotalSeconds- これは正しくありません。たとえば、60 秒の期間でSeconds0
DateTime nowDate = DateTime.Now;
DateTime then = DateTime.ParseExact(
    dr.GetValue(0).ToString(), "M/dd/yyyy h:mm:ss tt",
    CultureInfo.InvariantCulture);

TimeSpan diff = nowDate - then;

double secondsDifference = diff.TotalSeconds;

次のようなこともできるはずです。

DateTime then = dr.GetDateTime(0);

文字列の解析を完全に回避しますが、H/hの違いが、質問した特定の例外が発生する理由です。

于 2013-02-18T14:37:15.767 に答える
1

あなたの日付がデータベースのdatetimeのように見える場合、おそらく2行を次のように単純化できます。

DateTime nowDate = DateTime.Now;
DateTime then = (DateTime)dr.GetValue(0);

(ただし、ここでは多くの仮定を行っています)

于 2013-02-18T14:41:51.447 に答える
1

あなたのコードは本当に非常に単純でなければなりません:

if (dr.Read())
{
    DateTime then = dr.GetDateTime(0);
    TimeSpan diff = DateTime.Now - then;
    int timeDifference = diff.TotalSeconds;
}

注意すべきことの1つmyConn.Dispose();は、if/else. 接続とリーダーをusingステートメントでラップします。

于 2013-02-18T14:44:27.977 に答える
0

サーバーにはアプリケーションサーバーに他の日付形式が設定されていると思います。あなたが試すことができるのはこれです:

Convert.ToDate(value,System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormate);

これでエラーが解決することを願っています。テストしていないので、最善を願っています

于 2013-02-18T14:39:30.990 に答える