「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@701) [中] [解決]
@701■ (#2217) 「時間差」命令と「分差」命令での繰り上がり?表示 - のなお (2013-10-29 17:03) /高 未処理
【症状】時間が加算される現象

【再現方法】
※時間差
「00:00:00」と「00:30:01」の時間差を表示  #結果A:1(時間)
「00:00:00」と「00:31:00」の時間差を表示  #結果A:1(時間)
「00:00:00」と「00:59:00」の時間差を表示  #結果A:1(時間)
※分差
「00:00:00」と「00:00:30」の分差を表示    #結果B:1(分)
「00:00:00」と「00:00:59」の分差を表示    #結果B:1(分)

【要望】
結果A群は1時間以内なので「0」であって欲しい
結果B群は1分以内なので「0」であって欲しい

【バージョン】1.539
【その他】
四捨五入で繰り上がってるような雰囲気?
宜しくお願いします。

#-----------------------------------------------------------------------
追記:2013/10/18 18:31

修正までの代替案

●分差(AとBの|AからBまでの)
  INT((AとBの秒差)/60)で戻る

●時間差(AとBの|AからBまでの)
  INT((AとBの秒差)/3600)で戻る

#-----------------------------------------------------------------------
また追記:2013/10/18 19時
面倒なので各命令を一括で返す関数のサンプルを考えてみました。

●各時間差(AとBの|AからBまでの)
  Cとは配列。C[2]はAとBの秒差
  C[0]はINT((AとBの秒差)/3600)  #時間差
  C[1]はINT((AとBの秒差)/60)   #分差
  Cで戻る  #配列で戻る

#-----------------------------------------------------------------------
変更:2013/10/28 20時
3つの関数を書き直ししました。

#-----------------------------------------------------------------------
変更:2013/10/29 17時
もっと簡単な方法で3つの関数を書き直ししました。

(#2219) 時間差と分差の端数の扱い - うぇいく (2013-10-26 15:56) /高 未処理
難しいところですね。
使い方によって、どちらが良いのか変わってくるようなケースでは、既存の動きを変更するのは悩ましいところです。
今の動きは、「{時刻1}と{時刻2}の間は約{時刻1と時刻2の時間差}時間です」というように、そのまま表示するのには向いていると考えています。

0と1のケースや、分が30前後だと極端ですが、9:50ぐらいだと、「時間差10時間」のほうがしっくりくる というケースもあり得ます。この場合でも、分差と合わせて使おうとすると、うまくゆかない(9:50が時間差10と分差50となり、そのまま合成すると正しくない)
(引き算の前に端数を捨ててと、「1:30:00」と「2:20:00」の時間差のようなケースで困るので、あくまでも、全体での差異の対して、四捨五入/切り捨て/繰り上げを行う必要があります)

なお、一般的な言語では、「丸め」と「差異」を一緒に求めるような機能(関数)は見かけたことはありません。異なる操作なので、別々の関数で、明示的に使用しますが、「ほしいと思う機能が1命令」というのはなでしこの特徴だとおもいますので何とかしたいところです。

蛇足。
 時間差と分差は切り捨て(ロジックに組み込むには便利)に変更して、そのまま表示するのに向いている、「9:50」なら「10時間弱」、「0:30」なら「30分」、「5:35」なら、「約5時間半」みたいな命令を追加すると面白いかもしれません。どのくらいを区切りにするか悩ましいですが。

(#2221) 希望 - のなお (2013-10-29 17:18) /高 議論中
私としては、9時50分を10時間と表示するか、そのまま9時50分と表示するかはプログラマーに任せて欲しいのです。

「00:00:00」と「09:50:50」の時間差を表示  #時間差の結果:10
「00:00:00」と「09:50:50」の分差を表示   # 分差の結果:591

時間差は、
 INT((「00:00:00」と「09:50:50」の秒差)/3600)を表示 #希望結果:9
分差は、
 INT((「00:00:00」と「09:50:50」の秒差)/60)を表示  #希望結果:590
と同等な結果が理想です。現状の曖昧な結果は使いにくく私は感じます。

この結果の方がプログラムが組みやすいと思うのですが。。。どうでしょうか。
もう少し考えた方が良いかもしれないと思い、状態タグを「議論中」にしてみました。
他の方の意見も聞いてみたいですね。

(#2258) 要望に変更 - のなお (2014-01-29 16:52) /中 未処理
意見も出ず放置状態なので状態を「未処理」にし「要望」へ変更します。

「時間差」命令と「分差」命令で曖昧を無くしてほしいです。

例えば、時間差がゼロならば分差を利用し、分差もゼロならば秒差を使うという考え方(プログラム)が出来ない。
 

(#2260) Re: 要望に変更 - うぇいく (2014-01-30 01:29) /中 未処理
 既存の命令は、そのまま(理由は先に書いた通り)として、以下のように分ける感じになると思います。
 既存のそぞれお単独で使う前提の、時間差と分差。
 組み合わせて使う前提の、時分秒差時と時分秒差分と時分秒差秒。
もしくは、3命令に分けずに、単純に、時刻を表記した文字列同士や、日時を表記した文字列同士に対して、加算・減算をして、結果を文字列で返す命令のほうがプログラマには扱いやすいかもしれません。
(TIMESPAN("12:11:23","01:11:02")とすると、"11:00:21"が返る とか)

(#2262) 要望と違うので説明です - のなお (2014-01-30 17:56) /中 未処理
> もしくは、3命令に分けずに、単純に、時刻を表記した文字列同士や、日時を表記した文字列同士に対して、加算・減算をして、結果を文字列で返す命令のほうがプログラマには扱いやすいかもしれません。
そうですね。私もこちらの考え方の方が好きです。

> (TIMESPAN("12:11:23","01:11:02")とすると、"11:00:21"が返る とか)
要望と違うので説明します。

結果は
TIMESPAN("12:11:23","01:11:02")だと、"-11:-660:-39621"とマイナス
TIMESPAN("01:11:02","12:11:23")だと、"11:660:39621"
が希望です。

返値は、文字列でも配列でも構いません。
関数名は「時分秒差」は如何でしょうか?
あと、「秒差」命令と同じく日付も対象として欲しいです。

(#2270) Re: 要望と違うので説明です - うぇいく (2014-02-13 21:09) /中 未処理
推測しやすい結果が好みなので、通算的な値も必要な場合は、別関数・・;という感じだとどうでしょうか。

「01:20:30」を秒換算 とすると、4830が返る とか(他、分換算(80が返る)と時換算(1が返る)も付ける)

(#2274) ご思案頂きありがとうございました - のなお (2014-02-15 15:42) /中 解決
こんばんは。

> 推測しやすい結果が好みなので、通算的な値も必要な場合は、別関数・・;という感じだとどうでしょうか。
「推測しやすい結果が好み」の意味が分かりませんでした。

最初、「時間差と分差が四捨五入されててプログラムが組みにくいので切り捨てて欲しい」という思いが、要望です。

例えば、時間差で1と出て、あと1時間はあると安心し、時間差が0になったので次は分差を調べたら30分切ってた。と言うことになります。
のこり30分あり時間差が「0.5」と出るのであればまだ分かります。
なんかモヤモヤする命令で、役割(使い道)が分からないのです。

思いが伝わらないようなので取り下げます。
ありがとうございました。
 

(#2217)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能