年月日の表示 – プログラミング – Home

通知
すべてクリア

[解決済] 年月日の表示

固定ページ 1 / 2

コムギ
 コムギ
(@コムギ)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

初めて投稿させていただきます。
開発環境は
VC++ 6.0
windows 2000です。

CTime DataTime = CTime::GetCurrentTime();
CString str_DataTime = DataTime.Format(%y/%m/%d);

このソースで年月日を取得するとこまでできたのですが
そのあとにまだやりたいことがあるのですがわかりません。

現在の年度 = Aのとき
現在月日が
3/18 から 12/31 = A
1/1 から 3/17= A-1

現在月 = Bのとき
現在日が
1日から17日 = 月はB-1 日は15日
18日から31日 = 月はB 日は15日

できれば表示は2バイト文字で出力したいです。
よろしくお願いします。


引用未解決
トピックタグ
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

msdn ライブラリーで CTime のメンバーについて調べてみれば年、月、日それぞれが
取得できる事に気付くと思います
CTime::GetYear(), CTime::GetMonth(), CTime::GetDay()
後はお望みの処理ができるでしょう。
日本語の英数字で日付の表記がしたいというのはあなたがユニコードをお使いかシフトJIS
をお使いかで少しだけ違ってくるかもしれませんがそんなに難(むずか)しいこととは思え
ないのですが、どうでしょうか


返信引用
コムギ
 コムギ
(@コムギ)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

島さんレスありがとうございます。
なんとか頑張ってみます。


返信引用
コムギ
 コムギ
(@コムギ)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

やっぱりわからないのでもう一度聞かせてください。

CTime::GetYear(), CTime::GetMonth, CTime::GetDay;
このコードを書くと

error C2352: 'CTime::GetYear' : 静的でないメンバ関数の中で呼び出しが正しくありませ
ん。
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE\afx.h
(1556) : 'GetYear' の宣言を確認してください。

というエラーが出てしまいます。
どうしたらいいですか?


返信引用
7of9
 7of9
(@7of9)
ゲスト
結合: 22年前
投稿: 14
 

>CTime::GetYear(), CTime::GetMonth, CTime::GetDay;
は、
DataTime.GetYear(), DataTime.GetMonth(), DataTime.GetDay();
では?

# keyword : C++,クラス

参考までに、、、
CTime DataTime = CTime::GetCurrentTime();
CTime LastDay(1999,12,31,23,59,59);
とした場合、
DataTime.Year() は、今日の年
LastDay.Year() は、1999
となります。


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

CTime::GetYear() という表記は GetYear() という函数(かんすう)はクラス CTime の
メンバーだという事が示したいからですし、 , で区切って書いたのもこれだけのものが
見つかるでしょうと示したかっただけだし、行頭を空けているのもこういうのがあるよと
注意を引かせたかったからなんですが却って誤解を招いてしまったようです。
クラス CTime のメンバーについて msdn ライブラリーで調べていれば GetYear() が静的
(static)なメンバーかどうかは分ると思うのですが、どうなんでしょう?


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

というよりもC++そのものに慣れていないのかなという気もします。
C++の基本文法とかクラスのメンバー関数の取り扱いなど、
基礎的な知識をもっと仕入れないとプログラムの形から入っても
躓きそうな気がします。


返信引用
コムギ
 コムギ
(@コムギ)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

申し訳ありません。
PATIOさん、7of9さん、島さん
レスありがとうございました。


返信引用
コムギ
 コムギ
(@コムギ)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

なんとか思い通りの日付の取得ができました。
ありごとうございました。

CTime DataTime = CTime::GetCurrentTime();  //現在の日付を取得
CString s_year, s_month, s_day;
int now_year = DataTime.GetYear(); //年を取得
int now_month = DataTime.GetMonth(); //月を取得
int now_day = DataTime.GetDay(); //日を取得
int h = 1988; //平成元年

s_year.Format(%d, now_year - h); //年 int型→CString型
s_month.Format(%d, now_month); //月 int型→CString型
s_day.Format(%d, now_day); //日 int型→CString型

というかんじになりました。
そしてまた教えていただきたいのですが。
前の続きというか、わからなかったところです。

現在の年度 = Aのとき
現在月日が
3/18 から 12/31 = A
1/1 から 3/17= A-1

現在月 = Bのとき
現在日が
1日から17日 = 月はB-1 日は15日
18日から31日 = 月はB 日は15日

何をどう比較したらいいのかわからないので
教えていただけたら・・・


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

> 何をどう比較したらいいのかわからないので

コムギさんが書かれているように

> 現在の年度 = Aのとき
> 現在月日が
> 3/18 から 12/31 = A
> 1/1 から 3/17= A-1
> 現在月 = Bのとき
> 現在日が
> 1日から17日 = 月はB-1 日は15日
> 18日から31日 = 月はB 日は15日

コレをそのままプログラミングすればいいと思うのですが...

誰かコーディングしてくれっておっしゃってますか?


返信引用
コムギ
 コムギ
(@コムギ)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

できればコーティングの参考になるようなこと
教えていただけませんか?


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

現在の『年度』はコムギさんが提示したソースでは取得出来ていません。
Aを現在の年とすると
> 現在月日が
> 3/18 から 12/31 = A
> 1/1 から 3/17= A-1
これで年度を求める事が出来ます。

一般的には年度の初めは4/1で終わりは3/31ですから月を比較するだけで済むのですが、何か17
日が境に(何かの締め日ですか?)なっているようなので、日付も合わせて比較します。
> 3/18 から 12/31 = A
コレは現在の年を処理する必要がないので、調べる必要はありませんね。
現在の月が1・2月だったら、Aはマイナスされるわけですね。日付を比較する必要はありませ
んね。
問題は3月で、3月の時に17日までだったらAをマイナスします。

> 現在月 = Bのとき
> 現在日が
> 1日から17日 = 月はB-1 日は15日
> 18日から31日 = 月はB 日は15日

コレは年・月は関係ありませんから、日付のみ比較すればOKですね。
日付が18より以前(少なかったら)月が1マイナスされます。
この時1月だったら12月に設定します。年度は変化ありませんから、操作する必要はありませ
ん。
日付は有無を言わさず15日にすればOKです。

こんな感じでどうでしょう?
私が思いつかないだけで、もっと効率のいい方法もあると思います。


返信引用
コムギ
 コムギ
(@コムギ)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

> 現在の『年度』はコムギさんが提示したソースでは取得出来ていません。
和暦で表示させたいので -1988 をやりました。
ちゃんと 15 と表示されてるのですが・・・


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

> ちゃんと 15 と表示されてるのですが・・・
それは今が7月だからです。
来年になったら16ってなりますよね?
1/1~3/17までは平成15年度としたいと思いましたので
> 1/1 から 3/17= A-1
この処理で『年度』が求めることが出来るという意味です。
来年になってCTime::GetYear();しても2003のままではない(年度が返ってくるのではない)
ですよ、という事が言いたかったのですが...


返信引用
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

コムギさんにとっての年度の定義は?

一般的な用語としての年度は会社でしたら決算日を境に
決算日までをその年-1年度、決算日より後をその年のままの年度とすることが
多いのではないだろうか
たとえば学校なら
2000年 1月 1日~2000年 3月31日が1999年度
2000年 4月 1日~2000年12月31日が2000年度
(正確には日付にはずれがあるかもしれません、あくまでも例です)

つまり和暦だろうが西暦だろうが出ているのは何年までであって何年度は求められていない
というか、問題の中が年度(だけじゃないとしても)を求めよって事ではないのでしょうか?

とりあえず、2003年について考えてみましょう
1月は2002(2003-1)
2月は2002(2003-1)
3月は...
4月は2003
5月は2003
...
12月は2003
あとは3月について、もう少し細かく見れば良いのでは?


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました