• ベストアンサー

VC++  System::Stringに変換するには?

現在VisualC++ ExpressEditionを使って、C++の勉強をしながら万年カレンダーを作ろうとしていています。 ひとまずカレンダーの表示に使う月・日・曜日をDateTime::Nowから取り出したいのですが、 DateTime d1 = DateTime::Now.AddMonths; label1->Text = d1.ToShortTimeString; と試しにlabelに現在の月を表示させようとしたところ、 「1 番目の引数を 'System::String ^(__clrcall System::DateTime::* )(void)' から 'System::String ^' に変換できません。」 というエラーメッセージとともに弾かれてしまいます。 どこをどう変えればよいのか教えてください。 勉強を始めるのに買ってきた参考書では、DateTime::Now.ToLongTimeString;で日付から時刻まで繋げて表示する方法しか載っていませんでした(索引にもDateTime::Nowのみ) PCで検索しようとしても別の言語や参考書のHPが大量に引っかかって困っています。

  • 35a94
  • お礼率100% (8/8)

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.2

DateTime d1 = DateTime::Now; label1->Text = d1.ToString("yyyy年MM月dd日(ddd)dddd"); を試そう(実際にやってみた訳じゃないのでダメかもしんない)

35a94
質問者

お礼

回答ありがとうございます。 試しにやってみたらきちんと表示されました。 "yyyy"などのみで正しく表示されることが確認できたので、これを利用させていただきます。 回答頂きましたお二方、ありがとうございます。

その他の回答 (1)

回答No.1

VBとちがうのでカッコをつけてください。 label1->Text = d1.ToShortTimeString(); ちなみにエラーの内容は、 (String^型変数)に (引数を取らなく、String^を返すDateTimeクラスの関数=(デリゲード)) を代入できませんという趣旨のものです。

35a94
質問者

お礼

ありがとうございます。 エラー内容もStringに変換できていない、ということしか分からなかったので助かりました。 ()をつけたらコンパイルは通るようになりました。 しかし今度はSystem::DateTime::Now.AddMonthsに引数リストを要求されました。 DateTime d1 = DateTime::Now.AddMonths(0); label1->Text = d1.ToString(); と入れてみると結果が「2009/03/09 16:36:34」となってしまい、どうやらAddMonthsでは月の部分を取り出すことにはならないようです。 かといってNowをMonthなどに換えてもエラーが出て・・・ 別の関数があるのでしょうか?

関連するQ&A

  • VC++2008 フォーム間の変数の受け渡しについて

    フォーム1で DateTime d1; int year; d1 = DateTime::Now; year = System::Int32::Parse( d1.ToString("yyyy") ); で読み込んだ現在の年数を、フォーム2で使いたい場合どうすればいいのでしょうか? private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Form2^ f = gcnew Form2(); f->Show(); } でForm2を読み込んでいるので、ここに「変数yearを使う」旨を書けばいいのかとも思いましたが、うまく行きませんでした。 使用しているのはVisualC++2008 ExpressEdition。 ボタンをクリックすると別フォームを表示して、そこで元のフォームで使った変数を使おうと考えています。

  • VC++でif文が処理されません

    万年カレンダーを作っていて、先日こちらで日付の取得方法を質問して解決法を教えていただき、その後制作を進めていました。 が、今度はコンパイルは成功しても一部コードが処理されずに行き詰ってしまいました。 以下のようにlabel2に日付を表示させるコードを書いてみたのですが、/*日付の表示*/の if(wd%7 == 0){ label2->Text = Cal + "\r\n"; } が読み込まれていないようで、改行されません。 試しに"\r\n"ではなく別の文字列を入れてみたり、if(wd == 6)に換えてみたりしました。 が、どちらも成果はありませんでした。 どこかおかしい部分があるのでしょうか? コンパイルは成功するので、構文としては間違っていないと思います。 無駄に長いコードになってしまっているかも知れませんが、よろしくお願いします。 <↓ここからソースです> private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { DateTime d1 = DateTime::Now; textBox1->Text = d1.ToString("yyyy"); textBox2->Text = d1.ToString("MM"); int year,month,day ; /* 年 月 日 */ int wd; /* 曜日 */ int dm ; /* 月の日数 */ int L0 ; /* カウンタ */ String^ Cal = ""; /*年・月・日を代入*/ year = System::Int32::Parse( d1.ToString("yyyy") ); month = System::Int32::Parse( d1.ToString("MM") ); day = System::Int32::Parse( d1.ToString("dd") ); /*現在の年・月が何日あるか*/ switch(month) { case 2: if ( year%4 == 0 && (year%100 != 0 || year%400 ==0)){ dm = 29 ; /* うるう年 */ } else { dm = 28 ; break ; } case 4: case 6: case 9: case 11: dm = 30 ; break ; default: dm = 31 ; break ; } /* 今年・今月1日の曜日を求める */ if (month == 1 || month == 2) { year-- ; month += 12 ; } wd = (year + year/4 - year/100 + year/400 + (13*month+8)/5 +1) % 7 ; /* スペースの表示 */ for (L0=0;L0<wd;L0++) { label2->Text = Cal + " "; Cal = label2->Text; } /* 日付の表示 */ for(L0=1;L0<=dm;L0++){ if(wd == 6){ label2->Text = Cal + "\r\n"; } label2->Text = Cal + L0; Cal = label2->Text; wd = wd + 1; } label1->Text = "日  月  火  水  木  金  土" + "\r\n"; }

  • VC++ DateTimeを使った現在時刻取得

    VC++(CLI)で、現在時刻をstd::string文字列として、取得しようとしています。 時刻取得に、DateTime::ToStringを使うと、System::String でしか取得できません。 DateTime dt = DateTime::Now; String^ st= dt.ToString("HH:mm:ss");                  ↑この形式で、std::string文字列を取り出したい。 System::String から std::stringへの変換は、単純なキャストではなく変換処理が必要なので、他の方法を探しています。 他に思いつくのは、標準関数のtime.h localtimeから変換する方法くらいですが、他にstd::stringで必d家を取得する方法があれば教えてください。 環境: Win7 VC++2010 Express

  • C#のタイマーについて

    タイマーのプログラムを作っています。 namespace WindowsApplication3 { public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; protected System.Windows.Forms.Label label5; protected System.Windows.Forms.Label label6; protected System.Windows.Forms.Button button1; protected System.Windows.Forms.Button button2; protected DateTime dt; protected DateTime recTime; private System.Windows.Forms.GroupBox groupBox1; protected System.Windows.Forms.RadioButton radioButton1; protected System.Windows.Forms.RadioButton radioButton2; private System.Windows.Forms.Timer timer1; private System.ComponentModel.IContainer components; public Form1() { // // Windows フォーム デザイナ サポートに必要です。 // InitializeComponent(); DateTime dt; dt=DateTime.Now; string a="00"; string b=a; string c=a; label4.Text = string.Format("{0}時{1}分{2}秒", dt.Hour, dt.Minute,dt.Second); label5.Text = string.Format("{0}時{1}分{2}秒",a,b,c); label6.Text = string.Format("{0}時間{1}分{2}秒",a,b,c); // // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。 // dt=DateTime.Now; } /// <summary> /// 使用されているリソースに後処理を実行します。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows フォーム デザイナで生成されたコード /// <summary> /// デザイナ サポートに必要なメソッドです。このメソッドの内容を /// コード エディタで変更しないでください。 <<  文字数オーバーのため 省略>> /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } private void button2_Click(object sender, System.EventArgs e) { Application.Exit(); } protected void timer1_Tick(object sender, System.EventArgs e) { DateTime dt; dt=DateTime.Now; label4.Text = string.Format("{0}時{1}分{2}秒", dt.Hour, dt.Minute,dt.Second); } protected void button1_Click(object sender, System.EventArgs e) { DateTime recTime; recTime=DateTime.Now; TimeSpan k; k=dt-recTime; label5.Text=string.Format("{0}時{1}分{2}秒",recTime.Hour,recTime.Minute,recTime.Second); label6.Text=string.Format("{0}秒",k.Seconds); } } } このプログラムでは ボタン1をクリックするとlabel6に経過時間 label5に記録時間を出力させたいのですが、TimeSpanクラスが上手く使えず、経過時間がマイナスになってしまいます。アドバイスお願いします。

  • vc++子ウィンドウにおけるTimer動作について

    visualc++2008について。 Form2^ form12 = gcnew Form2(); form12->Show(); の記述で子ウィンドウを表示させるところまでできたのですが、その子ウィンドウでキッチンタイマーの動作をさせようと考えています。がTimer_tickが動作しません。 ShowではなくRunじゃないかとかいろいろ考えてやってみたのですが、ことごとくエラーでした。 Timerの動作部分TickにはTimer_tickを紐付けしてあります。 Timer動作もTureで、記述コードもとりあえず this->label1->Text = DateTime::Now.ToString("HH:mm:ss"); でまず、動作しているかの確認を行っています。 わかる方ご教授お願いします。

  • char型配列をString型にしたい

     VC++2005ExpressEdition + PlatformSDKを使用しています.  char型配列をString型にしたいと思っています(MessageBoxで表示するため).  int型ならば, > String^ out = String::Format("{0}", i ); > MessageBox::Show(out); などとできます.  下のアドレス(*1)のNo.2の答えにあるように > char ss[256]; > String^ out; > out=ss; とすると > error C2440: '=' : 'char [128]' から 'System::String ^' に変換できません。 なるエラーが出ます(S を大文字にしたりハットを付けたりしています).  char型の配列のString型への変換はどのようにすればいいのでしょうか. (*1)http://oshiete1.goo.ne.jp/kotaeru.php3?q=479640

  • VC++2005EEにて不可解な挙動

    int j = 0; for( ; ; ){  printf( "%d ", j ); } printf( "hoge \n" ); 上記コードを無限ループで回したところ、表示されるのは 0の羅列ではなくhogeの羅列でした。 このような状況ってありえるのでしょうか? 環境はVisualC++2005 ExpressEditionです。 また、なぜかコンパイル中に上記のforのところで warning C4127: 条件式が定数です。 という警告が出ていましたがなぜでしょうか。

  • C#について・・・

    次のようなブログラムなのですが、ラジオボタンが上手く切り替わりません。 どこを修正すると上手くいくでしょうか? <<文字数オーバーのため省略>> public Form1() { // // Windows フォーム デザイナ サポートに必要です。 // InitializeComponent(); if(isJapanStyle) { label5.Text=string.Format("0時0分0秒"); label6.Text=string.Format("0時0分0秒"); } else { label5.Text=string.Format("00:00:00"); label6.Text=string.Format("00:00:00"); } // // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。 // <<文字数オーバーのため 省略>> static void Main() { Application.Run(new Form1()); } protected void button1_Click(object sender, System.EventArgs e) { if(isJapanStyle) { label5.Text=string.Format("{0}時{1}分{2}秒",dt.Hour,dt.Minute,dt.Second); } else { label5.Text=DateTime.Now.ToString("T"); } recTime=dt; timer2.Stop(); timer3.Start(); } private void button2_Click(object sender, System.EventArgs e) { Application.Exit(); } private void timer1_Tick(object sender, System.EventArgs e) { dt=DateTime.Now; if(isJapanStyle) { label4.Text=string.Format("{0}時{1}分{2}秒",dt.Hour,dt.Minute,dt.Second); } else { label4.Text=DateTime.Now.ToString("T"); } } private void timer3_Tick(object sender, System.EventArgs e) { keika=dt-recTime; if(isJapanStyle) { label6.Text=string.Format("{0}時間{1}分{2}秒",keika.Hours,keika.Minutes,keika.Seconds); } else { label6.Text=string.Format("{0}:{1}:{2}",keika.Hours,keika.Minutes,keika.Seconds); } } private void timer2_Tick(object sender, System.EventArgs e) { timer3.Stop(); } private void radioButton2_CheckedChanged(object sender, System.EventArgs e) { isJapanStyle=false; } private void radioButton1_CheckedChanged(object sender, System.EventArgs e) { isJapanStyle=true; } } }

  • vc++6.0とVisual C++ 2010

    遊び程度ですが、VC++をいじったことがあります。 もう何年も触っていませんが。 lVisual C++ 2010 Expressについて調べていたら、    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {            label1->Text=L"はじめてのC++";         } というコードがありました。 vc++6.0に ”label1->Text=~”こんな1行で文字が表示できる方法ってありましたっけ。 次のサイトのような書き方だったと思いますが、コードの書き方が変わったのでしょうか? http://t-recipe.com/vc/string.html お分かりの方、教えてください。お願いします。

  • System.out.println(new 文)て?

    javaを勉強しています。カレンダーを作ろうと思い、以下のURLのカレンダーのコードを勉強していたのですが、タイトルのSystem.out.println(new文)の意味が分かりません。 下記のコードで言うと、;のつく文では一番下の文です。 よろしくお願いします。 http://www7a.biglobe.ne.jp/~java-master/samples/datetime/MonthlyCalendar.html

    • ベストアンサー
    • Java

専門家に質問してみよう