-1

データベースから情報を読み込んでいますが、表示/並べ替えの方法に問題があります。日時で読みたいのですが、日付だけを表示したいので、今から未来に並べ替えたいです。

nextreview.DataType = System.Type.GetType("System.DateTime");

これは私が今持っているものですが、これには時間が含まれていますが、私はそれを必要とせず、それをなくしたいと思っています。

以前にこれを持っていた:

nextreview.DataType = System.Type.GetType("System.String");

そしてそれを読むとき...私が望むように文字列を表示するように変換する

ToString("MM/dd/yyyy")

並べ替えの場合を除いて、これは完璧でした。

それで、それを「mm / dd / yyyy」として表示するが、それでも日時のように扱われるようにする方法についての助けはありますか?Webページにc#とasp.netを使用する

興味を持った人のためのコードはここにありますhttp://pastebin.com/WQBUyrQT

4

4 に答える 4

2

あなたはおそらく2段階のプロセスでそれをしたいと思うでしょう:

  1. データをそのまま保持しDateTimes、並べ替えます(LINQOrderByまたはを使用できますOrderByDescending)。
  2. 情報が並べ替えられたので、各メンバーのメソッドを使用して、情報をToString("MM/dd/yyyy")「日付」のみの文字列に変換できます。これを行うには、 LINQのSelectメソッドを使用できます。

例えば:

var myData = // get info from DB;
var sortedData = myData.OrderBy(a => a.DateProperty);
var stringData = sortedData.Select(a => a.ToString("MM/dd/yyyy");

stringDataIEnumerable<string>、フォーマットされた日付値を昇順で含むようになりました。

于 2012-04-04T15:59:39.027 に答える
2

書式設定は表示の機能であり、ビジネス ロジックの機能ではありません。したがって、書式設定ロジックは UI に属します。

この質問にタグを付けたので、 DataFormatString プロパティ(または xml では属性)asp.netを調査することをお勧めします。あなたが探している特定の値は."{0:d}"

Page_Load()サンプル コードから、このコードをハンドラーの下部近くのどこかに追加するように見えます。

((BoundField)gvEmployeeReview.Columns[1]).DataFormatString = "{0:d}"; //date hired column
((BoundField)gvEmployeeReview.Columns[8]).DataFormatString = "{0:d}"; //next review column

(もちろん、他の列に日付があるものは何でも追加してください!)

于 2012-04-04T17:20:06.750 に答える
1

System.Date 型はないので、残念ながら System.DateTime で動作させる必要があります。ただし、これは新しい問題ではなく、既知の解決策があります。

もう少し情報が必要かもしれません。テーブルからレコードを取得するために正確に何を使用しているか、それらのレコードを保持するために何を使用しているか、取得の背後にあるデータベース クエリをどのように構造化していますか?

日付/時刻値の時刻要素を気にしない場合、最初にできることは、DB クエリの一部として切り捨てることです。T-SQL の式は次のようになります。

   SELECT CONVERT(datetime, CONVERT(varchar(20), GetDate(), 101)) as Today

文字列に行ったり戻ったりせずに同じ結果が得られる操作があります。SQL Server 2008 以降では、キャストできる日付型がありますが、上記のクエリは比較的簡潔で、どの SQL Server バージョンでも機能します。 2000年以降。

次に、それができない場合 (たとえば、変更できないストアド プロシージャを使用している場合)、System.DateTime で利用可能な Date プロパティがあり、時刻コンポーネントをゼロにして値を返します (たとえば、DateTime.Now.Date == DateTime.Today) 。 . Linq の OrderBy() や List.Sort() など、ラムダを受け入れることができる並べ替え方法を使用している場合は、値を変更せずにその値を射影できます。または、値をまったく処理したくない場合は、テーブルを下に移動して、列の各フィールドを Date プロパティの値に設定するだけで値を変更できます。他の誰かがタイムスタンプを気にする可能性がある場合は、これらの値を DB に保存しないでください。

コメントから編集:

System.DateTime には常に時刻コンポーネントがあります。.NET の日時は、単一の Int64 "Ticks" 値に基づいています。1「ティック」~= 100ns。時間、分、秒などの時間に関連するすべてのプロパティは、「日付」コンポーネントの年、月、日と同様に、そのティック値に基づいて計算されます。たとえば、Seconds プロパティは、Ticks 値から開始し、モジュロを 1 分あたりのティック数 (6 億) で割ってから、結果を 1 秒あたりのティック数 (1000 万) で割ることによって計算されます。

したがって、「日付」と「時刻」の概念を切り離すことはまったく不可能です。これらは両方とも同じ数値に格納されているからです。最善の方法は、時間プロパティがすべてゼロと評価されるように、864,000,000,000 (24 時間のティック数) で割り切れるティック数で DateTime を指定することです。

于 2012-04-04T15:57:15.377 に答える
0

私はちょうどページを作り直し、テーブルをコードで構築するのではなく、グリッドビューで構築しました...最終的には、コードを少し変更する必要がありました...しかし、すべてがうまくいきました..すべての入力に感謝します

于 2012-04-12T14:20:59.960 に答える