• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#で年月を比較する)

C#で年月を比較する方法

このQ&Aのポイント
  • C#でプログラムをしている際に、年月のみを抽出して比較する方法を知りたいです。
  • 現在、string型のデータから年月だけを抽出し、比較処理を行いたいと考えていますが、エラーが発生しています。
  • 具体的には、例えば「2011/08/06」という日付があった場合、その中の年月部分のみを抽出したいと思っています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

string型の比較のエラーが出るはずはありませんが……。 DateTime.ParseでFormatExceptionが発生したのではありませんか。 なお,ToStringはシステムの設定に依存しますから, カスタム日付書式文字列を指定して文字列化しないと,Substringへ渡すには不適当です。 # uみたいなカルチャ依存しない標準日付書式文字列であれば問題ないですが。 そして,書式文字列を指定したのでParseExtractで同じ書式を指定してパースしないと正しく扱えません。 で,DateTime型の年と月を取り出したいわけですから, DateTime chkDate1 = new DateTime(date1.Year, date2.Month, 1); のように,日付には適当な日を指定して再構築すればよいです。 1日を指定すればどんな月にも確実にあります。 # 31日とかを指定すると,存在しない月ではArgumentOutOfRangeExceptionが発生します。 末日を指定したいなら, DateTime chkDate1 = new DateTime(date1.Year, date2.Month, 1).AddMonths(1).AddDays(-1); と,「その月の初日の翌月の日の前日」という指定の仕方をします。 references) MSDN: DateTime.Parse メソッド (String) (System) http://msdn.microsoft.com/ja-jp/library/1k1skd40.aspx MSDN: DateTime コンストラクター (Int32, Int32, Int32) (System) http://msdn.microsoft.com/ja-jp/library/xcfzdy4x.aspx

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C# datagridview データバインド系

    datagridviewのデータバインドについて教えてください. 今,下記のプログラム(一部)を組んで処理を行おうとしていますがうまくいかないため 何が悪いのか教えて頂けないでしょうか? 今datagridviewをデータテーブルにバインドしています. for (j = t; j < R - 1; j++) { object Ti = this.dataGridView1.Rows[j].Cells[0].Value; object Tibf = this.dataGridView1.Rows[j + 1].Cells[0].Value; string TiS = Convert.ToString(Ti); string TiSbf = Convert.ToString(Tibf); # region // シリアル値化 long serial = DateTime.Parse(TiS).ToBinary(); long serialbf = DateTime.Parse(TiSbf).ToBinary(); long parsesum = serial + Oneparse; if (serialbf != parsesum) { dataGridView1.Rows.Insert(j + 1, 1); // シリアル値から復元 DateTime dtm = DateTime.FromBinary(parsesum); string s = Convert.ToString(dtm); // 指定した書式で日付を文字列に変換する string stPrompt1 = dtm.ToString("yyyy/M/d H:mm"); this.dataGridView1.Rows[j + 1].Cells[0].Value = stPrompt1; } } 簡単に言うと,行を追加したいのですが,forの前でデータソースをnullにすると object Ti = this.dataGridView1.Rows[j].Cells[0].Value;でエラー if (serialbf != parsesum)の後にすると dataGridView1.Rows.Insert(j + 1, 1);でエラー が起こります.どちらの場合も下記のエラーが出ます. インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 パラメーター名: index 本当に困っています. よろしくお願いいたします.

  • SQLserver 型違いの日付の比較について

    下記のように項目がある場合、 where句の条件で年月の比較をどうすれば良いかわかりません。 年月日1(CHAR) 例:20070731 年月日2(SMALLDATETIME) where SUBSTRING(年月日1,1,4) = YEAR(年月日2) and SUBSTRING(年月日1,5,2) = MONTH(年月日2) と記述するとSUBSTRINGで取り出したデータは文字列、YEARで取り出したデータは数値、型が違うので比較してもダメでしょうか? 初歩的な質問で申し訳ありませんが どうすれば良いか教えてください。

  • 日付の比較について

    PHPで日付を比較したいのですが、、 どのようにしたらよいかわかりません。 データベースのように大なり小なりで比較できるのでしょうか? 例えば、下記のように記述した場合は日付比較は正常に行われているのでしょうか? 今日の日付 $date = date('Y-m-d'); DBから取得した日付 $str_date = '2005-05-22'; if($date < $str_data){ 処理1 }else{ 処理2 }

    • ベストアンサー
    • PHP
  • C# プログラム

    下記のプログラムを組んだのですが,for Dが1回しかまわりません. int[] Mo = new int[12]; #region Month ///<summary> ///月の定義 ///<summary/> Mo[0] = 4; Mo[1] = 5; Mo[2] = 6; Mo[3] = 7; Mo[4] = 8; Mo[5] = 9; Mo[6] = 10; Mo[7] = 11; Mo[8] = 12; Mo[9] = 1; Mo[10] = 2; Mo[11] = 3; #endregion int hh = f1.Ye; int ic = 0; for (int D = 0; D <= 11; D++) { int hye = hh; MessageBox.Show(D.ToString()); if (Mo[D] < 4) { hye = hh + 1; } int hmo = Mo[D]; // 2004年02月の日数を取得する int iDaysInMonth = DateTime.DaysInMonth(hye,hmo); //日数を積算 ic=ic + 31; int Sic = 31*D + 1; int Dic = 0; for (int N = Sic; N <= ic; N++) { Dic = Dic + 1; //必要な変数を宣言する DateTime dateValue = new DateTime(hye, hmo, Dic); // 曜日を取得する DayOfWeek uWeekday = dateValue.DayOfWeek; string W = ("日月火水木金土").Substring(int.Parse(dateValue.DayOfWeek.ToString("d")), 1); //MessageBox.Show(W.ToString()); string NI = Convert.ToString(Dic); if (Dic > iDaysInMonth) { NI = ""; W = ""; } //Labelに文字を入力。 string h = "label" + N; string hY = "label" + (N + 372); //MessageBox.Show(hY.ToString()); //日数を記入 Control[] cs = this.Controls.Find(h, true); ((Label)cs[0]).Text = NI; //曜日の記入 Control[] css = this.Controls.Find(hY, true); ((Label)css[0]).Text = W; } } いろいろ調べて //必要な変数を宣言する DateTime dateValue = new DateTime(hye, hmo, Dic); こいつが何らかの影響を及ぼしていることまではつかんだのですが,何が悪いのか,また, どうすれば改善できるのか解らず困っています. ご教授よろしくお願いいたします.

  • C#経過時間の求め方

    C#経過時間の求め方 お世話になっております。 初歩的な質問かもしれないので申し訳ないのですが、 やり方がわからなかったため質問させていただきます。 現在日時から定義の時間を引いた経過時間を求めたいのですが、やり方がわかりません。 現在、以下のようにやっているのですが、 データ型の規定を外れてしまうためエラーになってしまいます。 --------------------------------------------- string date = "2010/09/25"; string time = "13:00:00"; string[] b = {}; string[] c = {}; DataTime a; b = date.Split('/'); c = time.Split(':'); a = DateTime.Now.AddYears(-int.Parse(b[0])); a = DateTime.Now.AddMonths(-int.Parse(b[1])); a = DateTime.Now.Add(new TimeSpan(-int.Parse(b[2]), -int.Parse(c[0]), -int.Parse(c[1]), -int.Parse(c[2]))); --------------------------------------------- 経過時間を求めたいので、 ○時間○分だけでも表示できるようにしておきたいです。 何か適切な方法はありませんでしょうか? ご回答頂ければありがたく思います。 宜しくお願い致します。

  • C++/CLIでの時間表示

    VC++2008のC++/CLIで時間の間隔を表示するプログラムを作成しています。 DateTime mySpan = DateTime::Parse(txtStartTime->Text); DateTime dtToday = DateTime::Now::get(); TimeSpan interval = dtToday - mySpan ; String^ strInterval = interval.ToString(); 上記のように,現在と時刻とtxtStartTime->textに表示されている時刻との差を取得しています。 この時, 秒単位の表示が出来ればいいのですが,strInterval の時刻が 00:01:05.12457895... のように不要な小数点まで表示されます。 どのようにすれば, 00:00:00 のような形式で表示できますでしょうか?

  • 文字列を日付に変換でParseException

    文字列を日付に変換するところで、「ParseException: Unparseable date: "2013/08/06"   at java.text.DateFormat.parse(DateFormat.java:335) 」とエラー表示されました。 実際のコーディングは Date sgndate = new Date(); if(!StringUtil.isNull(rs.getString("sgnymd"))){ String lstdaysgn = rs.getString("sgnymd"); lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +                               lstdaysgn.substring(8,10); sgndate = DateFormat.getDateInstance().parse(lstdaysgn); ・・・・・・・・・ここでエラー発生 } どこが悪いのか解りません。 よろしくご教授ください。

    • ベストアンサー
    • Java
  • 日付の比較

    こんばんは^^ 1) 標題の通り、日付の比較を行いたいのです。 Stringで例えば、「20021207」と「20020601」とか 西暦の年月日をもっているとします。 この2つを比較したいのです。 調べた所では、Dateクラス、Calenderクラスに after()やbefore()のメソッドがあって、それを 使えばいいと言う所までわかりました。 それで、DateクラスのコンストラクタにStringの文字を渡せる のですが、それは推奨されてないみたいで・・・・・。 DateFormatは使い方がいまいちわからなくて。。 どのようにして、Stringの文字列(年月日)をDateやCalender型 に変換して、比較を行えば良いでしょうか?? (簡単なサンプルを見せていただけると助かります) #intに変換して大小を比較する事も出来そうですが、それは #あまりやりたくないので、質問させてもらいました。 #よろしくお願いします。 2) あと、intに変換して比較することと比べて、DateやCalenderクラスの after()やbefore()を使うことによるメリットって何でしょうか?? (あまりメリットはない??) こちらは、興味で追加質問させていただきます。 ご存知の方、ご教示いただけると嬉しく思います。 非常にあつかましいとは思いますが、よろしくお願いします。 #さらに違うやり方などもあれば教えてください。

    • ベストアンサー
    • Java
  • C#で日付の表示を変更する方法

    お世話様です。 C#でプログラムを作っています。(初心者です) 日付の表示の仕方でわからないところがあります。 a.WriteLine ( DateTime.Now.ToString() ) とすると、下記のように表示されます。 2005/03/01 16:31:14  これを下記のように表示するにはどうすれば良いでしょうか? 2005年3月1日 16時31分14秒

  • C#で型変換

    DataTable T_DATATABLE = new DataTable(); DataRow[] T_DATATABLE_row; DataAdapter adp = new DataAdapter("SELECT id,Date FROM TABLE", CONN); adp.Fill(T_DATATABLE); //データテーブルにidとDateフィールドがあります。 //dtに下記で取得したダータを入れようと思っているのですが、 //System.Datetimeに変換することはできませんと表示されます。 DateTime dt = T_DATATABLE.Rows[0]["Date"]; どのようにすれば、型変換をすることができるでしょうか? string dt = (string)T_DATATABLE.Rows[0]["Date"]; string dt = (string)T_DATATABLE.Rows[0]["Date"].toString; としてもできません・・・ ご教授お願い致します!