年月日の表示 – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] 年月日の表示

固定ページ 2 / 2

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

そうですね・・・
年はちゃんと取得できてますが年度は
計算をしなくてはだめですよね。

月、日を含め、それらをどのようなソースで書けばいいのか
わからなかったのです・・・


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

まずは年度だけだが、こんなソースは思い浮かばなかったのかな?
これはかなり悪い書き方だけど、スタート地点としてはこんなもんだよ
もしこれが思い浮かばなかったのなら、もう少し基礎的な本でじっくりやった方が良いかも
この程度なら思いついていたというなら、自分で思いついたソースを提示して
コメントを求める等、掲示板での質問の仕方を考えた方が良いだろう

見て分かるとおり、コムギさんが書いた日本語をソースにしたにすぎない
つまりコムギさんが書いた日本語をそのままソースにすれば解答となっていたと
みなさんは考えているのです(しかも「日本語」->「ソース」の間で特別なテクニックが必要な
ところも無いように思えた)

月度(というのかな?)月次?の方はコムギさんがソースを書いてくれると
僕的には大変ありがたい

int now_year2;
if (now_month == 1) {
now_year2 = now_year - 1;
} else if (now_month == 2) {
now_year2 = now_year - 1;
} else if (now_month == 3) {
if (now_day == 1) {
now_year2 = now_year - 1;
} else if (now_day == 2) {
now_year2 = now_year - 1;
...省略
} else if (now_day == 17) {
now_year2 = now_year - 1;
} else if (now_day == 18) {
now_year2 = now_year;
...省略
} else if (now_day == 31) {
now_year2 = now_year;
} else {
エラー
}
} else if (now_month == 4) {
now_year2 = now_year;
} else if (now_month == 5) {
now_year2 = now_year;
} else if (now_month == 6) {
now_year2 = now_year;
} else if (now_month == 7) {
now_year2 = now_year;
} else if (now_month == 8) {
now_year2 = now_year;
} else if (now_month == 9) {
now_year2 = now_year;
} else if (now_month == 10) {
now_year2 = now_year;
} else if (now_month == 11) {
now_year2 = now_year;
} else if (now_month == 12) {
now_year2 = now_year;
} else {
エラー
}


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

kuさん ご丁寧にありがとうございます。
まだまだ勉強不足で申し訳ありません。

for文を使えばいいのですよね?
月と日にちを自分でやってみて
またわからなかったら
お願いします。


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

> for文を使えばいいのですよね?
境界で判断すればよいだけです。


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

レス送れてすみません。
まだまだ勉強不足のため、こんな感じにしか書けませんでした・・・
改善点などご指摘お願いします。

int now_year2, now_month2, now_day2=15;

//年度の取得
if(now_month == 1||2){
now_year2 = now_year - 1;
}else if(now_month == 3){
if(now_day ==
1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17){
now_year2 = now_year - 1;
}else if(now_day ==
18||19||20||21||22||23||24||25||26||27||28||29||30||31){
now_year2 = now_year;
}
}else if(now_month == 4||5||6||7||8||9||10||11||12){
now_year2 = now_year;
}
//月の取得
if(now_day == 1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17){
now_month2 = now_month - 1;
}else if(now_day == 18||19||20||21||22||23||24||25||26||27||28||29||30||31)
{
now_month2 = now_month;
}


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

int now_year2, now_month2, now_day2=15;

//年度の取得
if(now_month == 1||2){
now_year2 = now_year - 1;
}else if(now_month == 3){
if(now_day == 1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17){
now_year2 = now_year - 1;
}else if(now_day == 18||19||20||21||22||23||24||25||26||27||28||29||30||31){
now_year2 = now_year;
}
}else if(now_month == 4||5||6||7||8||9||10||11||12){
now_year2 = now_year;
}
//月の取得
if(now_day == 1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17){
now_month2 = now_month - 1;
}else if(now_day == 18||19||20||21||22||23||24||25||26||27||28||29||30||31){
now_month2 = now_month;
}

上のだと見にくいと思いますので
少し見やすいものをもう一度書かせていただきました。


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

日付が1~17間と18~31間では同じ処理ですよね。
その事に着目すれば、もっとシンプルになると思います。
日付は数字なのですから、大小の比較が簡単に出来るという事ですね。
月も同じ事が言えます。


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

このまんまで正常に処理できました?
長くなるので省略している?(そうとも思えないけど)
そもそも
if(now_month == 1||2){
って、必ず真になりますよね?

もし下記のコードが書けなかったのなら、
基礎的な本をもう少し時間をかけて学習した方が良いと思うよ
if (now_month == 1 || now_month == 2) {

あと
now_month2 = now_month - 1;
はnow_monthが1(月)だとnow_month2は0になっちゃうよね?
これも何らかの判定をして処理しないといけない
たぶんそのときはnow_month2を12にしないとね


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

>日付が1~17間と18~31間では同じ処理ですよね。
>その事に着目すれば、もっとシンプルになると思います。
>日付は数字なのですから、大小の比較が簡単に出来るという事ですね。
>月も同じ事が言えます

int now_year2, now_month2, now_day2=15;

//年度の取得
if(now_month == 1||now_month == 2){
now_year2 = now_year - 1;
}else if(now_month == 3){
if(now_day <= 17){
now_year2 = now_year - 1;
}else if(now_day >= 18){
now_year2 = now_year;
}
}else if(now_month >= 4){
now_year2 = now_year;
}
//月の取得
if(now_day <= 17){
now_month2 = now_month - 1;
}else if(now_day >= 18){
now_month2 = now_month;
}

こんなかんじですか?

>now_month2 = now_month - 1;
>はnow_monthが1(月)だとnow_month2は0になっちゃうよね?
>これも何らかの判定をして処理しないといけない
>たぶんそのときはnow_month2を12にしないとね

何らかの判定・・・?
詳しく教えていただけますか?
申し訳ありません。


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

now_monthが正しければ、
now_month2 = now_month;
の方ではnow_month2が0になることはない
now_month2が0になる可能性があるのはnow_month - 1したときだよね

その場合に
now_month2が0になったらnow_month2を12にするようにコードを書けば良いよ
もちろんnow_monthが1の場合とそれ以外で処理してもOKです(こっちが普通かな)


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

なんとか解決したと思います。
長い間本当にありがとうございました。
またわからないことがありましたら
よろしくお願いします。

一応、確認していただけますか?

>now_month2が0になったらnow_month2を12にするようにコードを書けば良いよ

//月の取得
if(now_day <= 17){
now_month2 = now_month - 1;
if(now_month == 1){
now_month2 = 12;
}
}else if(now_day >= 18){
now_month2 = now_month;
}


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

コムギさんの書き方なら、こっちの方が最初に思いつきそうな感じです
if (now_day <= 17) {
now_month2 = now_month - 1;
if (now_month2 == 0) {
now_month = 12;
}
now_month1を比較する場合は下記のような感じかな
if (now_day <= 17) {
if (now_month == 1) {
now_month2 = 12;
} else {
now_month2 = now_month - 1;
}
こんな感じを想定しました。now_month2に12を設定する場合ですが
now_month - 1を代入する回数が1回少なくて済みます
ただし結果は同じですので、コムギさんの方法でOKです


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

now_month2は他に良いのが思い浮かびませんが
now_year2についてはこんなやりかたも考えられます
時間ができたときにでも、考えてみてください

int nMonthDay = now_month * 100 + now_day;
if (nNonthDay <= 317) {
now_year2 = now_year - 1;
} else {
now_year2 = now_year;
}


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

kuさん、本当に感謝してます。

長い間ありがとうございます。
もっと勉強していきたいと思います。
またわからないところがあったら
よろしくお願いします。


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

最初からCTime::GetMonth()の値をnow_month2に代入しておけば
> }else if(now_day >= 18){
> now_month2 = now_month;
は要らなくなると思います。

> if(now_day <= 17){
> now_month2 = now_month - 1;
> if(now_month == 1){
> now_month2 = 12;
> }
> }
今が1月だった場合now_month2に値が2回代入されることになりますので個人的には

if ( now_day <= 17 )
{
if ( now_month == 1 )
{
now_month2 = 12;
}
else
{
now_month2 = now_month - 1;
}
}

が好みです。

解決したらチェックを入れましょう。


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

返信する

投稿者名

投稿者メールアドレス

タイトル *

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