0

次の問題に直面しています:

私のデータベースのtrans_in( DateTime)の値は次のようになることがあります:1900-01-01 00:00:00.000

そして、このようにテレリックレポートに表示され12:00 AMます。代わりにテキストボックスを空に表示したいので、次のカスタムメソッドを作成します:

  public static string NotAttend(DateTime trans_in)
        {
            if (trans_in == null || trans_in.ToString().Trim() == "1900-01-01 00:00:00.000")
            {
                return string.Empty;
            }
            else
                return trans_in.ToShortTimeString();
        }

次のようにテキストボックスをバインドします。

= OvertimeReports.CustomExpressions.NotAttend(Fields.trans_in)

しかし、これは私の問題を解決しませんでした12:00 AM

4

4 に答える 4

2

あなたの現在の文化に基づいtrans_in.ToString()てオブジェクトの文字列表現を返します。好きなものをチェックすると良いでしょう:DateTimeDateTime

public static string NotAttend(DateTime trans_in)
{
   if(trans_in == new DateTime(1900, 1, 1))
   {
        return string.Empty;
   }
    else
        return trans_in.ToShortTimeString();
}
于 2013-05-13T10:56:24.017 に答える
1

ここでの問題は、.ToString変換に関するフォーマットの問題です

このために .ToString オーバーロードで必要な特定の形式を使用してみてください

trans_in("yyyy-M-d HH:mm:ss.fff")

したがって、このHH場合、12:00 ではなく 00:00 になります。

より良い方法はDateTime、1900-1-1 の DateTime obj を作成して比較しtrans_in.Date、この文字列の書式設定の問題を含まない部分と比較することです。

于 2013-05-13T10:54:36.567 に答える
1

trans_in と比較してみてくださいdefault(new DateTime())

フォーマットせずに日付を文字列と比較しないでください

参照: http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/d0f4578c-0585-4f38-95be-569a90ebeb21/

編集:ここで、新しい日付がデフォルトの new DateTime() であるかどうかを判断することと比較するのが最適です。DateTime.MinValue

于 2013-05-13T10:54:55.277 に答える
1

DateTimeのオーバーライドされた関数を使用して、フォーマットを提供できますDateTime.ToString()HH時間を24 HRS意味hhし、12 HRSフォーマットを意味します:

 public static string NotAttend(DateTime trans_in)
 {
   if (trans_in == null || 
       trans_in.ToString("yyyy-MM-dd HH:mm:ss.fff") == "1900-01-01 00:00:00.000")
     {
       return string.Empty;
     }
   else
    return trans_in.ToShortTimeString();
  }
于 2013-05-13T10:59:37.553 に答える