C# 是否有一个“问题”;简称;ISO 8601时间和偏移量(不含小数秒)的格式说明符?
对于没有[可选]小数秒的表示,是否存在“short[er]”格式说明符 也就是说C# 是否有一个“问题”;简称;ISO 8601时间和偏移量(不含小数秒)的格式说明符?,c#,.net,datetime,string-formatting,iso8601,C#,.net,Datetime,String Formatting,Iso8601,对于没有[可选]小数秒的表示,是否存在“short[er]”格式说明符 也就是说 var n = DateTimeOffset.Now; // short "s" format - 2014-02-14T10:41:49 n.ToString("s") // short "o" format - 2014-02-14T10:41:49.7200222-08:00 n.ToString("o") // desired output // custom format - 2014
var n = DateTimeOffset.Now;
// short "s" format - 2014-02-14T10:41:49
n.ToString("s")
// short "o" format - 2014-02-14T10:41:49.7200222-08:00
n.ToString("o")
// desired output
// custom format - 2014-02-14T10:41:49-08:30
n.ToString("yyyy-MM-ddTHH:mm:sszzz")
最后一种情况是否有“short[er]”格式说明符
上下文说明:我主要使用的格式是
string.Format
,其中长格式可以很快弄乱格式字符串。对不起,第一次误解了这个问题。我认为扩展方法最有效:
class Program {
static void Main() {
Console.WriteLine(DateTimeOffset.Now.ToCustomString());
}
}
static class DateHelper {
public static string ToCustomString(this DateTimeOffset time) {
return time.ToString("yyyy-MM-ddTHH:mm:sszzz", CultureInfo.InvariantCulture);
}
}
您需要指定CultureInfo.InvariantCulture
,否则将使用CurrentCulture
替换用户的当前区域时间组件分隔符:
,该分隔符可能不是冒号,这将导致不符合ISO 8601的字符串
如果您需要在具有多个替换字段的较长字符串中使用它,请查看。我不理解“truncate”位。自定义格式说明符确实有效,但似乎不需要太长。很难将变量转换为格式字符串(如
string.format
),尽管我想在这种情况下使用之前,我总是可以使用实用方法或变量和ToString
。它看起来不长,只需编写一个自定义扩展方法。我不知道为什么这不是.NET中的内置标准格式-这太疯狂了,因为这正是最适合HTML5的
元素的格式。最接近的是往返格式“o”
,但这包括我们不想要的分数秒。使用DateTimeOffset
时,没有其他内置标准格式自动包含所需的zzz
说明符。似乎您已经完成了使用yyyy-MM-ddTHH:MM:sszzz
格式字符串所需的内容。你有什么问题?@wdosanjos当被问到时,我想知道是否有一个我忽略的较短的标准格式说明符:)string.format(“..{0:yyyy-MM-ddTHH:MM:sszzz}..{1:yyyy-MM-ddTHH:MM:sszzz}.”,
看起来很快就会变得“丑陋”。@wdosanjos当然,答案可能只是“不”。。或者“不,但是你可以…”可能string.Format(“{0:s}{0:zzz}”,DateTime.Now)
会n.ToString(“szzz”)
工作吗?这可能是一个很好的短期解决方案。