如何以T07:07:45-0500格式获取当前时间

时间:2014-12-23 12:32:00

标签: c# string datetime

我想以T07:07:45-0500格式获取当前时间。

我试过这样:

DateTime currentDate = DateTime.Now;
String currentTime = currentDate.ToString("'T'HH':'mm':'ssK");
Console.WriteLine("DOB ==> " + dateOfBirth.ToString("yyyy-MM-dd") + currentTime);

但结果是1986-07-11T07:07:45-05:00

我想要像1986-07-11T07:07:45-0500

这样的结果

有没有办法以T07:07:45-0500格式获取当前时间。

请帮我解决我的问题。

2 个答案:

答案 0 :(得分:1)

我不认为.NET custom date and time format strings允许这种格式。如果您希望应用系统默认时区,则可以使用DateTimeOffset.Now轻松地使用我的Noda Time项目。 (可以明确地完成

例如:

var odt = OffsetDateTime.FromDateTimeOffset(DateTimeOffset.Now);
var pattern = OffsetDateTimePattern.CreateWithInvariantCulture(
    "yyyy-MM-dd'T'HH:mm:sso<+HH:mm>");
Console.WriteLine(pattern.Format(odt));

正如评论中所指出的,在组合这些值方面,你目前正在做一些非常奇怪的事情。如果你真的想这样做,我会亲自创建一个合适的OffsetDateTime

LocalDate dateOfBirth = ...; // Wherever that comes from
OffsetDateTime now = OffsetDateTime.FromDateTimeOffset(DateTimeOffset.Now);
OffsetDateTime mixture = dateOfBirth.At(now.LocalTime).WithOffset(now.Offset);
var pattern = ...; // as before
Console.WriteLine(pattern.Format(mixture));

这使得如何组合这些值更加清晰。

答案 1 :(得分:1)

认为偏移的表示取决于CurrentCulture代表UTC Offset值的方式。格式可能是-05:00-0500,或者只是 - 05

基于评论,看起来像UTC偏移格式是硬编码的,它不依赖于任何文化。

您应该清楚地找到:字符的最后一个索引,并将其替换为空字符串。我不认为.NET Framework中有另一种解决方案。

DateTime currentDate = DateTime.Now;
String currentTime = currentDate.ToString("'T'HH':'mm':'ssK");
currentTime = currentTime.Remove(currentTime.LastIndexOf(":"), 1);