C# 是否有一个“问题”;简称;ISO 8601时间和偏移量(不含小数秒)的格式说明符?

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

对于没有[可选]小数秒的表示,是否存在“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-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”)
工作吗?这可能是一个很好的短期解决方案。