web-dev-qa-db-ja.com

C#でIntを時間に変換する方法は?

私は06,07,08、.....、16,17,18、...のような整数値を持っています.

この整数値を24時間形式に変換したいと思います。

私はこのようなことをしています

//fromTime holds one of the integer value.
DateTime fromTimeDate = DateTime.ParseExact(fromTime.ToString(), 
                                              "HH", 
                                              CultureInfo.InvariantCulture);  

string fromtimestring = fromTimeDate.ToString("hh:mm tt");

しかし、それはエラーを与えています

「文字列は有効な日時として認識されませんでした。」

解析中。

ここで私が間違っていること。 ?

8
vaibhav shah

このコードを試してください:

int val = 16;
TimeSpan result = TimeSpan.FromHours(val);
string fromTimeString = result.ToString("hh':'mm");

実際には、DateTimeは1日の時間のみに関心があるため、ニーズを表すのに適切なタイプではないと思います。日付も日を表しており、(私の知る限り)切り捨てることはできません。

TimeSpan.FromHoursメソッド を参照

25
Steve B

最も簡単な方法は次のようなものです。

DateTime time = Date.Today + new TimeSpan (0, 0, seconds);
4

失敗する可能性があるのは、2つの理由が考えられます。

  • 最初に、あなたのfromTime0から9までの1桁の整数を保持しています。その909ではないため、HH
  • 2番目の理由は、整数が23より大きいか、0より小さい場合です。

両方で機能する1桁のHにフォーマットを変更できます。

DateTime fromTimeDate = DateTime.ParseExact(fromTime.ToString(), "H", CultureInfo.InvariantCulture);   //fromTime holds one of the integer value.

上記は、0から23までの数値を解析します。

ちなみにTimeSpanよりDateTimeのように見えますが、 TimeSpan.FromHours メソッドを使用してTimeSpanに変換できます。

int fromTime = 23;
TimeSpan ts = TimeSpan.FromHours(fromTime);
3
Habib

「HH」フォーマットには2桁が必要です。整数は単なる「9」なので、_09_です。

そこでfromTime.ToString("00")を使用して、先頭に0を強制します。

そのDateTimeのdate部分は「今日」になることに注意してください。

3
Hans Kesting

実際にhave時間を表すintの場合、解析を行う必要はまったくありません。

int hour = 23;
var today = DateTime.Today;
var time = new DateTime(today.Year, today.Month, today.Day, hour, 0, 0);

または(上記の@ gean08の回答を少し変更したバージョン):

var time = DateTime.Today + TimeSpan.FromHours(hour);
1
Matthew Watson

あなたが書いたコードは正しいです一度チェックしてください...........

"fromTime"の値は、 "06"または "0"の代わりに "6"または "24を超えるその他の数値"のように1桁になる場合があります

「文字列は有効な日時として認識されませんでした。」下の行で "HH"の代わりに "hh"を使用すると、このエラーが発生します..............

DateTime fromTimeDate = DateTime.ParseExact(fromTime.ToString(), "HH", 
CultureInfo.InvariantCulture);
1
andy
 public string timeformat(int time) {
    string hr, min;
    min = Convert.ToString(time % 100);
    hr = Convert.ToString(time / 100);
    if (hr.Length == 1) hr = "0" + hr;
    if (min.Length == 1) min = "0" + min;
    return hr + ":" + min;
}
1
praveen