我有一个存储在类型变量中的值System.TimeSpan,如下所示.
System.TimeSpan storedTime = 03:00:00;
Run Code Online (Sandbox Code Playgroud)
我可以将它重新存储在另一个类型的变量中String,如下所示吗?
String displayValue = "03:00 AM";
Run Code Online (Sandbox Code Playgroud)
如果storedTime变量的值为
storedTime = 16:00:00;
Run Code Online (Sandbox Code Playgroud)
那么它应该转换为:
String displayValue = "04:00 PM";
Run Code Online (Sandbox Code Playgroud)
Asi*_*taq 165
您可以通过将时间跨度添加到日期来完成此操作.
TimeSpan timespan = new TimeSpan(03,00,00);
DateTime time = DateTime.Today.Add(timespan);
string displayTime = time.ToString("hh:mm tt"); // It will give "03:00 AM"
Run Code Online (Sandbox Code Playgroud)
Bil*_*lal 13
使用字符串格式非常简单
上 .ToSTring("") :
如果你使用"hh" - >>小时,使用从12到12的12小时制.
如果你使用"HH" - >>小时,使用从00到23的24小时制.
如果你添加"tt" - >> Am/Pm指示符.
例如,从23:12转换到11:12 Pm:
DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
var res = d.ToString("hh:mm tt"); // this show 11:12 Pm
var res2 = d.ToString("HH:mm"); // this show 23:12
Console.WriteLine(res);
Console.WriteLine(res2);
Console.Read();
Run Code Online (Sandbox Code Playgroud)
等待一秒不是你需要关心的其他东西就是系统文化,因为在窗口上执行相同的代码与其他语言特别是不同的文化语言将使用相同的代码产生不同的结果
设置为阿拉伯语文化的窗口的例子将显示如下:
// 23:12م
م表示晚上(مساء的第一个).
在另一个系统文化取决于windows区域和语言选项上设置的内容,它将显示// 23:12 du.
你可以在windows区域和语言 - >当前格式(组合框)下更改窗口控制面板上的不同格式,并更改...应用它做你的应用程序的重建(执行),看看我在说什么.
那么如果当前系统的文化没有设置为英语,我可以强制在英语中显示Am和Pm Words吗?
只需添加两行即可: - >
第一步添加using System.Globalization;代码
并修改以前的代码是这样的:
DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
var res = d.ToString("HH:mm tt", CultureInfo.InvariantCulture); // this show 11:12 Pm
Run Code Online (Sandbox Code Playgroud)
InvariantCulture =>使用默认的英文格式.
另一个问题我想让pm用阿拉伯语或特定语言,即使我使用Windows设置为英语(或其他语言)区域格式?
阿拉伯语的例子:
DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
var res = d.ToString("HH:mm tt", CultureInfo.CreateSpecificCulture("ar-AE"));
Run Code Online (Sandbox Code Playgroud)
这将显示// 23:12م
如果我的系统设置为英语区域格式,则为event.如果你想要另一种语言格式,你可以改变"ar-AE".每种语言及其格式都有一个列表.
例子:ar ar-SA阿拉伯语ar-BH ar-BH阿拉伯语(巴林)ar-DZ ar-DZ阿拉伯语(阿尔及利亚)ar-EG ar-EG阿拉伯语(埃及)
Tim*_*ter 11
您可以添加TimeSpan到a DateTime,例如:
TimeSpan span = TimeSpan.FromHours(16);
DateTime time = DateTime.Today + span;
String result = time.ToString("hh:mm tt");
Run Code Online (Sandbox Code Playgroud)
04:00 PM
Run Code Online (Sandbox Code Playgroud)
Hen*_*man 10
string displayValue="03:00 AM";
Run Code Online (Sandbox Code Playgroud)
这是一个时间点,而不是持续时间(TimeSpan).
所以你的基本设计或假设出了问题.
如果您确实想要使用它,则必须先将其转换为DateTime(时间点).您可以格式化没有日期部分的DateTime,这将是您想要的字符串.
TimeSpan t1 = ...;
DateTime d1 = DateTime.Today + t1; // any date will do
string result = d1.ToString("hh:mm:ss tt");
Run Code Online (Sandbox Code Playgroud)
storeTime变量可以具有类似值
storeTime=16:00:00;
不,它可以有4点的值,但表示是二进制的,时间跨度不能记录之间的差别16:00和4 pm.
Chr*_*sic 10
在这里做一些捎带现有答案:
public static string ToShortTimeSafe(this TimeSpan timeSpan)
{
return new DateTime().Add(timeSpan).ToShortTimeString();
}
public static string ToShortTimeSafe(this TimeSpan? timeSpan)
{
return timeSpan == null ? string.Empty : timeSpan.Value.ToShortTimeSafe();
}
Run Code Online (Sandbox Code Playgroud)
您需要DateTime从您那里获取一个对象TimeSpan,然后您可以轻松地对其进行格式化.
一种可能的解决方案是将时间跨度添加到零时间值的任何日期.
var timespan = new TimeSpan(3, 0, 0);
var output = new DateTime().Add(timespan).ToString("hh:mm tt");
Run Code Online (Sandbox Code Playgroud)
输出值将为"03:00 AM"(对于英语区域设置).
您无法将AM / PM添加到TimeSpan。如果要以12小时时钟格式显示时间TimaSpan,DateTime则无论如何都必须将值与之关联。
TimeSpan不适用于12小时制,因为我们在这里讨论的是时间间隔。
如文档中所说;
甲
TimeSpan对象表示一个时间间隔,其作为测量(时间或经过的时间的持续时间)的正或负天,小时,分钟,秒和秒的小数部分的数。该TimeSpan结构也可以用于表示一天中的时间,但前提是该时间与特定日期无关。否则,应改用DateTimeorDateTimeOffset结构。
此外微软文档描述如下:
甲
TimeSpan值可以被表示为[-]d.hh:mm:ss.ff,其中所述可选的减号指示负的时间间隔,该d组分是天,hh作为上的测得的是小时24小时时钟,mm是分钟,ss是秒,并且ff是几分之一秒。
因此,在这种情况下,您可以使用AM / PM显示如下。
TimeSpan storedTime = new TimeSpan(03,00,00);
string displayValue = new DateTime().Add(storedTime).ToString("hh:mm tt");
Run Code Online (Sandbox Code Playgroud)
旁注:
还应注意,的TimeOfDay属性DateTime是TimeSpan,它代表
一个时间间隔,表示自午夜以来经过的一天的一部分。
为了避免时间跨度格式限制,请转换为日期时间。最简单的表达是:
// Where value is a TimeSpan...
(new DateTime() + value).ToString("hh:mm tt");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143107 次 |
| 最近记录: |