如何在c#中将整数转换为时间?

11

我有像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");

但是它报错了

"字符串未被识别为有效的日期时间。"

在解析时出现错误。

我在这里做错了什么?


你在哪一行出现了错误? - andy
我在第一行遇到了错误。 - vaibhav shah
1
你的代码是有效的,因此你传递的整数肯定有问题。我敢打赌你传递了零,这是无效的并会导致你看到的错误! - Tom Chantler
7个回答

34

请尝试这段代码:

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

实际上,我认为DateTime不是用来表示你的需求的正确类型,因为你只关心一天中的时间。日期还代表了那一天,你不能将其截断(就我所知)。

请参见TimeSpan.FromHours方法


我在MySQL数据库中有一个时间字段。这个代码可以使用它吗? - vaibhav shah
我不确定,但它看起来更接近于 .Net 中的 Timespan 类型而不是 Datetime。 - Steve B

5

最简单的方法是这样做:

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

3
它只有两个可能的失败原因。
  • 第一个原因是您的fromTime只包含一个数字,从09,由于它是9而不是09,所以使用格式HH时会失败。
  • 第二个原因是整数大于23或小于0
您可以将格式修改为单个数字H,这样就可以同时适用于两种情况。
DateTime fromTimeDate = DateTime.ParseExact(fromTime.ToString(), "H", CultureInfo.InvariantCulture);   //fromTime holds one of the integer value.

上面的代码可以解析从 023 的任何数字。
顺便说一下,它更像是 TimeSpan 而不是 DateTime,您可以使用 TimeSpan.FromHours 方法将其转换为 TimeSpan
int fromTime = 23;
TimeSpan ts = TimeSpan.FromHours(fromTime);

3

"HH"格式需要两个数字,而整数09只是"9"。

在那里使用fromTime.ToString("00")以强制添加前导0。

请注意,该DateTime的日期部分将会是"today"。


1

你编写的代码是正确的,请再检查一次...........

"fromTime" 的值可能是单个数字,如 "6",而不是 "06" 或 "0" 或 "大于 24 的其他数字"

当你在下面的行中使用 "hh" 而不是 "HH" 时,你会收到 "字符串未被识别为有效的 DateTime" 错误提示信息..............

DateTime fromTimeDate = DateTime.ParseExact(fromTime.ToString(), "HH", 
CultureInfo.InvariantCulture);

1
如果您实际上有一个代表小时的整数,您不需要进行任何解析:
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
 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;
}

2
你能解释一下你的答案吗?“授人以鱼不如授人以渔”之类的。 - Wai Ha Lee
我?你想让我解释吗? - praveen
如果您输入一个整数值,例如1020,它将返回一个字符串值10:20......即使您输入920...它也会返回09:20。 - praveen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接