我有一个存储在类型变量中的值System.TimeSpan,如下所示。
System.TimeSpan storedTime = 03:00:00;
我可以String按如下方式将其重新存储在另一个类型的变量中吗?
String displayValue = "03:00 AM";
如果storedTime变量的值为
storedTime = 16:00:00;
然后应将其转换为:
String displayValue = "04:00 PM";
我有一个存储在类型变量中的值System.TimeSpan,如下所示。
System.TimeSpan storedTime = 03:00:00;
我可以String按如下方式将其重新存储在另一个类型的变量中吗?
String displayValue = "03:00 AM";
如果storedTime变量的值为
storedTime = 16:00:00;
然后应将其转换为:
String displayValue = "04:00 PM";
Answers:
您可以通过将时间跨度添加到日期中来实现。
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"
time.ToShortTimeString()
使用字符串格式非常简单
上 .ToSTring("") :
如果使用“ hh”->>小时,则使用从12到01的12小时制时钟。
如果您使用“ HH”->>小时,则使用24小时制,从00到23。
如果添加“ 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();
稍等片刻,这不是您需要关心的所有事情,而是系统文化,因为在Windows上与其他语言一起执行的相同代码,尤其是具有不同文化语言的代码将生成具有相同代码的不同结果
设置为阿拉伯语言文化的窗户的示例将显示为:
// 23:12م
م表示“晚上”(مساfirst的第一个字母)。
在另一种系统文化中,取决于Windows区域和语言选项的设置,它将显示// 23:12 du。
您可以在Windows区域和语言下的Windows控制面板上的不同格式之间进行切换->当前格式(组合框),然后更改...应用它来重新构建(执行)您的应用并观看iam所讨论的内容。
如果当前系统的文化未设置为英语,那么谁可以强制在英语事件中显示Am和Pm单词?
只需添加两行即可:->
第一步添加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
InvariantCulture =>使用默认英语格式。
另一个问题,即使我使用设置为英语(或其他语言)区域格式的窗口,我也希望将pm设置为阿拉伯语或特定语言吗?
以阿拉伯语为例:
DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
var res = d.ToString("HH:mm tt", CultureInfo.CreateSpecificCulture("ar-AE"));
这将显示// 23:12م
如果我的系统设置为英语区域格式,则为event。您可以将“ ar-AE”更改为其他语言格式。每种语言及其格式都有一个列表。
示例:ar ar-SA阿拉伯语ar-BH ar-BH阿拉伯语(巴林)ar-DZ ar-DZ阿拉伯语(阿尔及利亚)ar-EG ar-EG阿拉伯语(埃及)
您可以将添加TimeSpan到中DateTime,例如:
TimeSpan span = TimeSpan.FromHours(16);
DateTime time = DateTime.Today + span;
String result = time.ToString("hh:mm tt");
04:00 PM
11:57 pm工作了几个小时后,这才起作用: TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
string displayValue="03:00 AM";
这是一个时间点,而不是持续时间(TimeSpan)。
因此,您的基本设计或假设有问题。
如果确实要使用它,则必须先将其转换为DateTime(时间点)。您可以格式化不带日期部分的DateTime,这将是您想要的字符串。
TimeSpan t1 = ...;
DateTime d1 = DateTime.Today + t1; // any date will do
string result = d1.ToString("hh:mm:ss tt");
storeTime变量可以具有如下值
storeTime=16:00:00;
不,它可以有4点的值,但表示是二进制的,时间跨度不能记录之间的差别16:00和4 pm。
DateTime.TimeOfDay返回了TimeSpan-微软引导您进行这种设计:(
DateTime,如果有的话,那么(“ 03:00 AM”)将仅仅是一个实例。但是,我可以看到,对于大多数用例而言,这种设计(相对DateTime)会使问题变得过于复杂(当然,这样做的代价是使围绕日期,时间,绝对值或非绝对值进行非常具体的工作变得更加复杂) ,时区等)
DateTime,甚至还(它已经够糟了)。应该有一个代表“一天中的时间”的类型-当然,这正是我在Noda Time中实现的。每当您尝试将许多不同的概念填充到少数类型中时,您肯定会遇到这样的问题。
DateTime,TimeOfDay和Date。
03:00 AM不是“时间点”。这是“一天中的要点”。
在这里进行一些现有答案的piggy带:
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();
}
您将需要DateTime从您的对象中获取一个对象TimeSpan,然后可以轻松设置其格式。
一种可能的解决方案是将时间跨度添加到时间值为零的任何日期。
var timespan = new TimeSpan(3, 0, 0);
var output = new DateTime().Add(timespan).ToString("hh:mm tt");
输出值为"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");
旁注:
还应注意,的TimeOfDay属性DateTime为TimeSpan,它表示
一个时间间隔,表示自午夜以来经过的一天的一部分。
Parse timespan to DateTime. For Example.
//The time will be "8.30 AM" or "10.00 PM" or any time like this format.
public TimeSpan GetTimeSpanValue(string displayValue)
{
DateTime dateTime = DateTime.Now;
if (displayValue.StartsWith("10") || displayValue.StartsWith("11") || displayValue.StartsWith("12"))
dateTime = DateTime.ParseExact(displayValue, "hh:mm tt", CultureInfo.InvariantCulture);
else
dateTime = DateTime.ParseExact(displayValue, "h:mm tt", CultureInfo.InvariantCulture);
return dateTime.TimeOfDay;
}
datepicker value + TimeofDay?