关于JavaScript中Date对象字符串格式化的说明

一、定义Date对象字符串格式化方法:

// 定义全局的Date对象字符串格式化方法
(function (window, undefined) {
    // 判断Date对象字符串格式化方法是否已经定义
    if (typeof (window.dateFormat) == "function") {
        return;
    }
    /**
    * date:需要格式化的Date对象
    * format:格式化规则
    * return:Date对象格式化后的字符串
    */
    window.dateFormat = function (date, format) {
        var o = {
            "M+": date.getMonth() + 1,
            "d+": date.getDate(),
            "H+": date.getHours(),
            "m+": date.getMinutes(),
            "s+": date.getSeconds(),
            "q+": Math.floor((date.getMonth() + 3) / 3),
            "S": date.getMilliseconds()
        };
        if (/(y+)/.test(format)) {
            format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
        for (var k in o) {
            if (new RegExp("(" + k + ")").test(format)) {
                format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
            }
        }
        return format;
    };
})(window);

二、可以同时将字符串格式化方法绑定到Date的原型上:

// 绑定字符串格式化方法到Date的原型上
Date.prototype.format = function (format) {
    return dateFormat(this, format);
};

这样的好处是可以直接通过调用Date实例对象的format方法来达到字符串格式化的效果。

三、参数说明:
date:需要格式化的Date实例对象,当使用原型方法时,直接传递Date的实例对象。

format:格式化规则,取值为字符“y(年)”、“M(月)”、“d(日)”、“H(时)”、“m(分)”、“s(秒)”、“q(季度)”、“S(毫秒)”和其他需要直接显示的字符的组合。其中字符“y”、“M”、“d”、“H”、“m”、“s”、“q”可迭代出现,并且除“y”字符最多可迭代4位外,其他字符最多可迭代2位。当“y”迭代出现时格式化为年份的精度,即“yyyy”表示4位年份,“yy”则表示两位年份;当其他字符迭代出现并且格式化后的字符数未达到迭代数时,将会在格式化后的字符串前面补上缺少位数的“0”字符,如1月采用“M”规则时格式化为“1”,而采用“MM”规则时则格式化为“01”。字符“S”无迭代,单一出现,代表3位毫秒数。

四、调用示例:

// 创建Date对象
var date = new Date();
// 调用全局方法
var format1 = dateFormat(date, "yyyy-MMM-dd"); // 结果:2016-01-11
var format2 = dateFormat(date, "yy-M-d H:m:s.S"); // 结果:16-1-11 8:9:59.456
// 调用原型方法
var format3 = date.format("yyyy/MM/dd HH:mm:ss"); // 结果:2016/01/11 08:09:59
var format4 = date.format("yyyy年q季度"); // 结果:2016年1季度

关于C#中日期和时间字符串格式化的说明

一、标准日期和时间格式字符串:
标准日期和时间格式字符串使用单个格式说明符来定义日期和时间值的文本表示形式。包含一个以上字符(包括空白)的任何日期和时间格式字符串都会被解释为自定义日期和时间格式字符串。可通过两种方式使用标准或自定义格式字符串:定义由格式设置操作生成的字符串;定义可通过分析操作转换为DateTime或DateTimeOffset值的日期和时间值的文本表示形式。
标准日期和时间格式字符串可以与DateTime和DateTimeOffset值一起使用。
以下列出支持的标准日期和时间格式说明符并显示由每个格式说明符产生的示例输出:

“d”
说明:短日期模式。
示例:
2009-06-15T13:45:30 -> 6/15/2009 (en-US)
2009-06-15T13:45:30 -> 15/06/2009 (fr-FR)
2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)

“D”
说明:长日期模式。
示例:
2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US)
2009-06-15T13:45:30 -> Montag, 15.Juni 2009 (de-DE)

“f”
说明:完整日期/时间模式(短时间)。
示例:
2009-06-15T13:45:30 -> Monday, June 15, 2009 1:45 PM (en-US)
2009-06-15T13:45:30 -> den 15 juni 2009 13:45 (sv-SE)

“F”
说明:完整日期/时间模式(长时间)。
示例:
2009-06-15T13:45:30 -> Monday, June 15, 2009 1:45:30 PM (zh-CN)
2009-06-15T13:45:30 -> den 15 juni 2009 13:45:30 (sv-SE)

“g”
说明:常规日期/时间模式(短时间)。
示例:
2009-06-15T13:45:30 -> 6/15/2009 1:45 PM (en-US)
2009-06-15T13:45:30 -> 15/06/2009 13:45 (es-ES)
2009-06-15T13:45:30 -> 2009/6/15 13:45 (zh-CN)

“G”
说明:常规日期/时间模式(长时间)。
示例:
2009-06-15T13:45:30 -> 6/15/2009 1:45:30 PM (en-US)
2009-06-15T13:45:30 -> 15/06/2009 13:45:30 (es-ES)
2009-06-15T13:45:30 -> 2009/6/15 13:45:30 (zh-CN)

“M”、”m”
说明:月/日模式。
示例:
2009-06-15T13:45:30 -> June 15 (en-US)
2009-06-15T13:45:30 -> 15.juni (da-DK)
2009-06-15T13:45:30 -> 15 Juni (id-ID)

“O”、”o”
说明:往返日期/时间模式。
示例:
DateTime值:
2009-06-15T13:45:30 (DateTimeKind.Local) -> 2009-06-15T13:45:30.0000000-07:00
2009-06-15T13:45:30 (DateTimeKind.Utc) -> 2009-06-15T13:45:30.0000000Z
2009-06-15T13:45:30 (DateTimeKind.Unspecified) -> 2009-06-15T13:45:30.0000000
DateTimeOffset值:
2009-06-15T13:45:30-07:00 -> 2009-06-15T13:45:30.0000000-07:00

“R”、”r”
说明:RFC1123模式。
示例:
2009-06-15T13:45:30 -> Mon, 15 Jun 2009 20:45:30 GMT

“s”
说明:可排序日期/时间模式。
示例:
2009-06-15T13:45:30 (DateTimeKind.Local) -> 2009-06-15T13:45:30
2009-06-15T13:45:30 (DateTimeKind.Utc) -> 2009-06-15T13:45:30

“t”
说明:短时间模式。
示例:
2009-06-15T13:45:30 -> 1:45 PM (en-US)
2009-06-15T13:45:30 -> 13:45 (hr-HR)

“T”
说明:长时间模式。
示例:
2009-06-15T13:45:30 -> 1:45:30 PM (en-US)
2009-06-15T13:45:30 -> 13:45:30 (hr-HR)

“u”
说明:通用可排序日期/时间模式。
示例:
2009-06-15T13:45:30 -> 2009-06-15 20:45:30Z

“U”
说明:通用完整日期/时间模式。
示例:
2009-06-15T13:45:30 -> Monday, June 15, 2009 8:45:30 PM (en-US)
2009-06-15T13:45:30 -> den 15 juni 2009 20:45:30 (sv-SE)

“Y”、”y”
说明:年月模式。
示例:
2009-06-15T13:45:30 -> June, 2009 (en-US)
2009-06-15T13:45:30 -> juni 2009 (da-DK)
2009-06-15T13:45:30 -> Juni 2009 (id-ID)

任何其他单个字符
说明:未知说明符,引发运行时FormatException。

二、自定义日期和时间格式字符串:
日期和时间格式字符串定义由格式设置操作生成的DateTime或DateTimeOffset值的文本表示形式。它还可定义分析操作中需要的日期和时间值的表示形式,以便成功将字符串转换为日期和时间。自定义格式字符串由一个或多个自定义日期和时间格式说明符组成。任何不是标准日期和时间格式字符串的字符串都会解释为自定义日期和时间格式字符串。
自定义日期和时间格式字符串可以与DateTime和DateTimeOffset值一起使用。
以下列出支持的自定义日期和时间格式说明符并显示由每个格式说明符产生的示例输出:

“d”
说明:一个月中的某一天(1到31)。
示例:
2009-06-01T13:45:30 -> 1
2009-06-15T13:45:30 -> 15

“dd”
说明:一个月中的某一天(01到31)。
示例:
2009-06-01T13:45:30 -> 01
2009-06-15T13:45:30 -> 15

“ddd”
说明:一周中某天的缩写名称。
示例:
2009-06-15T13:45:30 -> Mon (en-US)
2009-06-15T13:45:30 -> lun.(fr-FR)

“dddd”
说明:一周中某天的完整名称。
示例:
2009-06-15T13:45:30 -> Monday (en-US)
2009-06-15T13:45:30 -> lundi (fr-FR)

“f”
说明:日期和时间值的十分之几秒。
示例:
2009-06-15T13:45:30.6170000 -> 6
2009-06-15T13:45:30.05 -> 0

“ff”
说明:日期和时间值的百分之几秒。
示例:
2009-06-15T13:45:30.6170000 -> 61
2009-06-15T13:45:30.0500000 -> 00

“fff”
说明:日期和时间值的千分之几秒。
示例:
6/15/2009 13:45:30.617 -> 617
6/15/2009 13:45:30.0005 -> 000

“ffff”
说明:日期和时间值的万分之几秒。
示例:
2009-06-15T13:45:30.6175000 -> 6175
2009-06-15T13:45:30.0000500 -> 0000

“fffff”
说明:日期和时间值的十万分之几秒。
示例:
2009-06-15T13:45:30.6175400 -> 61754
6/15/2009 13:45:30.000005 -> 00000

“ffffff”
说明:日期和时间值的百万分之几秒。
示例:
2009-06-15T13:45:30.6175420 -> 617542
2009-06-15T13:45:30.0000005 -> 000000

“fffffff”
说明:日期和时间值的千万分之几秒。
示例:
2009-06-15T13:45:30.6175425 -> 6175425
2009-06-15T13:45:30.0001150 -> 0001150

“F”
说明:如果非零,则为日期和时间值的十分之几秒。
示例:
2009-06-15T13:45:30.6170000 -> 6
2009-06-15T13:45:30.0500000 ->(无输出)

“FF”
说明:如果非零,则为日期和时间值的百分之几秒。
示例:
2009-06-15T13:45:30.6170000 -> 61
2009-06-15T13:45:30.0050000 ->(无输出)

“FFF”
说明:如果非零,则为日期和时间值的千分之几秒。
示例:
2009-06-15T13:45:30.6170000 -> 617
2009-06-15T13:45:30.0005000 ->(无输出)

“FFFF”
说明:如果非零,则为日期和时间值的万分之几秒。
示例:
2009-06-15T13:45:30.5275000 -> 5275
2009-06-15T13:45:30.0000500 ->(无输出)

“FFFFF”
说明:如果非零,则为日期和时间值的十万分之几秒。
示例:
2009-06-15T13:45:30.6175400 -> 61754
2009-06-15T13:45:30.0000050 ->(无输出)

“FFFFFF”
说明:如果非零,则为日期和时间值的百万分之几秒。
示例:
2009-06-15T13:45:30.6175420 -> 617542
2009-06-15T13:45:30.0000005 ->(无输出)

“FFFFFFF”
说明:如果非零,则为日期和时间值的千万分之几秒。
示例:
2009-06-15T13:45:30.6175425 -> 6175425
2009-06-15T13:45:30.0001150 -> 000115

“g”、”gg”
说明:时期或纪元。
示例:
2009-06-15T13:45:30.6170000 -> A.D.

“h”
说明:采用12小时制的小时(从1到12)。
示例:
2009-06-15T01:45:30 -> 1
2009-06-15T13:45:30 -> 1

“hh”
说明:说明:采用12小时制的小时(从01到12)。
示例:
2009-06-15T01:45:30 -> 01
2009-06-15T13:45:30 -> 01

“H”
说明:采用24小时制的小时(从0到23)。
示例:
2009-06-15T01:45:30 -> 1
2009-06-15T13:45:30 -> 13

“HH”
说明:采用24小时制的小时(从00到23)。
示例:
2009-06-15T01:45:30 -> 01
2009-06-15T13:45:30 -> 13

“K”
说明:时区信息。
示例:
DateTime值:
2009-06-15T13:45:30, Kind Unspecified ->
2009-06-15T13:45:30, Kind Utc -> Z
2009-06-15T13:45:30, Kind Local -> -07:00(取决于本地计算机的设置)
DateTimeOffset值:
2009-06-15T01:45:30-07:00 -> -07:00
2009-06-15T08:45:30+00:00 -> +00:00

“m”
说明:分钟(0到59)。
示例:
2009-06-15T01:09:30 -> 9
2009-06-15T13:29:30 -> 29

“mm”
说明:分钟(00到59)。
示例:
2009-06-15T01:09:30 -> 09
2009-06-15T01:45:30 -> 45

“M”
说明:月份(1到12)。
示例:
2009-06-15T13:45:30 -> 6

“MM”
说明:月份(1到12)。
示例:
2009-06-15T13:45:30 -> 06

“MMM”
说明:月份的缩写名称。
示例:
2009-06-15T13:45:30 -> Jun (en-US)
2009-06-15T13:45:30 -> juin (fr-FR)
2009-06-15T13:45:30 -> Jun (zu-ZA)

“MMMM”
说明:月份的完整名称。
示例:
2009-06-15T13:45:30 -> June (en-US)
2009-06-15T13:45:30 -> juni (da-DK)
2009-06-15T13:45:30 -> uJuni (zu-ZA)

“s”
说明:秒(0到59)。
示例:
2009-06-15T13:45:09 -> 9

“ss”
说明:秒(00到59)。
示例:
2009-06-15T13:45:09 -> 09

“t”
说明:AM/PM指示符的第一个字符。
示例:
2009-06-15T13:45:30 -> P (en-US)
2009-06-15T13:45:30 -> (fr-FR)

“tt”
说明:AM/PM指示符。
示例:
2009-06-15T13:45:30 -> PM (en-US)
2009-06-15T13:45:30 -> (fr-FR)

“y”
说明:年份(0到99)。
示例:
0001-01-01T00:00:00 -> 1
0900-01-01T00:00:00 -> 0
1900-01-01T00:00:00 -> 0
2009-06-15T13:45:30 -> 9
2019-06-15T13:45:30 -> 19

“yy”
说明:年份(00到99)。
示例:
0001-01-01T00:00:00 -> 01
0900-01-01T00:00:00 -> 00
1900-01-01T00:00:00 -> 00
2019-06-15T13:45:30 -> 19

“yyy”
说明:年份(最少三位数字)。
示例:
0001-01-01T00:00:00 -> 001
0900-01-01T00:00:00 -> 900
1900-01-01T00:00:00 -> 1900
2009-06-15T13:45:30 -> 2009

“yyyy”
说明:由四位数字表示的年份。
示例:
0001-01-01T00:00:00 -> 0001
0900-01-01T00:00:00 -> 0900
1900-01-01T00:00:00 -> 1900
2009-06-15T13:45:30 -> 2009

“yyyyy”
说明:由五位数字表示的年份。
示例:
0001-01-01T00:00:00 -> 00001
2009-06-15T13:45:30 -> 02009

“z”
说明:相对于UTC的小时偏移量,无前导零。
示例:
2009-06-15T13:45:30-07:00 -> -7

“zz”
说明:相对于UTC的小时偏移量,带有表示一位数值的前导零。
示例:
2009-06-15T13:45:30-07:00 -> -07

“zzz”
说明:相对于UTC的小时和分钟偏移量。
示例:
2009-06-15T13:45:30-07:00 -> -07:00

“:”
说明:时间分隔符。
示例:
2009-06-15T13:45:30 -> : (en-US)
2009-06-15T13:45:30 -> .(it-IT)
2009-06-15T13:45:30 -> : (ja-JP)

“/”
说明:日期分隔符。
示例:
2009-06-15T13:45:30 -> / (en-US)
2009-06-15T13:45:30 -> – (ar-DZ)
2009-06-15T13:45:30 -> .(tr-TR)

‘字符’或”字符串”
说明:文本字符串分隔符。
2009-06-15T13:45:30 (“arr:” h:m t) -> arr: 1:45 P
2009-06-15T13:45:30 (‘arr:’ h:m t) -> arr: 1:45 P

“%”
说明:将下面的字符定义为自定义格式说明符。
示例:
2009-06-15T13:45:30 (%h) -> 1

“\”
说明:转义字符。
示例:
2009-06-15T13:45:30 (h \h) -> 1 h

任何其他字符
说明:字符将复制到未更改的结果字符串。
示例:
2009-06-15T01:45:30 (arr hh:mm t) -> arr 01:45 A

更多信息请参阅:标准日期和时间格式字符串自定义日期和时间格式字符串

关于C#中数字字符串格式化的说明

一、标准数字格式字符串:
标准数字格式字符串用于格式化通用数值类型。该数字格式字符串采用Axx的形式,其中A是称为格式说明符的字母型字符,xx是称为精度说明符的可选整数。精度说明符的范围从0到99,并且影响结果中的位数。任何包含一个以上字母字符(包括空白)的数字格式字符串都被解释为自定义数字格式字符串。
所有数字类型的ToString方法的某些重载支持标准数字格式字符串。例如,可将数字格式字符串提供给ToString(String)类型的ToString(String, IFormatProvider)方法和Int32方法。.NET Framework复合格式化功能也支持标准数字格式字符串,该功能由Write和WriteLine类的某些Console和StreamWriter方法、String.Format方法以及StringBuilder.AppendFormat方法使用。
以下列出支持的标准数字格式说明符并显示由每个格式说明符产生的示例输出:

“C”或”c”
名称:Currency。
结果:货币值。
支持类型:所有数值类型。
精度说明符:小数位数。
默认值精度说明符:由System.Globalization.NumberFormatInfo定义。
示例:
123.456 (“C”, en-US) -> $123.46
123.456 (“C”, fr-FR) -> 123,46 €
123.456 (“C”, ja-JP) -> ¥123
-123.456 (“C3”, en-US) -> ($123.456)
-123.456 (“C3”, fr-FR) -> -123,456 €
-123.456 (“C3”, ja-JP) -> -¥123.456

“D”或”d”
名称:Decimal。
结果:整型数字,负号可选。
支持类型:仅整型。
精度说明符:最小位数。
默认值精度说明符:所需的最小位数。
示例:
1234 (“D”) -> 1234
-1234 (“D6”) -> -001234

“E”或”e”
名称:指数(科学型)。
结果:指数记数法。
支持类型:所有数值类型。
精度说明符:小数位数。
默认值精度说明符:6。
示例:
1052.0329112756 (“E”, en-US) -> 1.052033E+003
1052.0329112756 (“e”, fr-FR) -> 1,052033e+003
-1052.0329112756 (“e2”, en-US) -> -1.05e+003
-1052.0329112756 (“E2”, fr_FR) -> -1,05E+003

“F”或”f”
名称:定点。
结果:整数和小数,负号可选。
支持类型:所有数值类型。
精度说明符:小数位数。
默认值精度说明符:由System.Globalization.NumberFormatInfo定义。
示例:
1234.567 (“F”, en-US) -> 1234.57
1234.567 (“F”, de-DE) -> 1234,57
1234 (“F1”, en-US) -> 1234.0
1234 (“F1”, de-DE) -> 1234,0
-1234.56 (“F4”, en-US) -> -1234.5600
-1234.56 (“F4”, de-DE) -> -1234,5600

“G”或”g”
名称:常规。
结果:最紧凑的定点表示法或科学记数法。
支持类型:所有数值类型。
精度说明符:有效位数。
默认值精度说明符:取决于数值类型。
示例:
-123.456 (“G”, en-US) -> -123.456
123.456 (“G”, sv-SE) -> -123,456
123.4546 (“G4”, en-US) -> 123.5
123.4546 (“G4”, sv-SE) -> 123,5
-1.234567890e-25 (“G”, en-US) -> -1.23456789E-25
-1.234567890e-25 (“G”, sv-SE) -> -1,23456789E-25

“N”或”n”
名称:Number。
结果:整数和小数、组分隔符和小数分隔符,负号可选。
支持类型:所有数值类型。
精度说明符:所需的小数位数。
默认值精度说明符:由System.Globalization.NumberFormatInfo定义。
示例:
1234.567 (“N”, en-US) -> 1,234.57
1234.567 (“N”, ru-RU) -> 1 234,57
1234 (“N”, en-US) -> 1,234.0
1234 (“N”, ru-RU) -> 1 234,0
-1234.56 (“N”, en-US) -> -1,234.560
-1234.56 (“N”, ru-RU) -> -1 234,560

“P”或”p”
名称:百分比。
结果:乘以100并显示百分比符号的数字。
支持类型:所有数值类型。
精度说明符:所需的小数位数。
默认值精度说明符:由System.Globalization.NumberFormatInfo定义。
示例:
1 (“P”, en-US) -> 100.00 %
1 (“P”, fr-FR) -> 100,00 %
-0.39678 (“P1”, en-US) -> -39.7 %
-0.39678 (“P1”, fr-FR) -> -39,7 %

“R”或”r”
名称:往返过程。
结果:可以往返至相同数字的字符串。
支持类型:Single、Double和BigInteger。
精度说明符:忽略。
示例:
123456789.12345678 (“R”) -> 123456789.12345678
-1234567890.12345678 (“R”) -> -1234567890.1234567

“X”或”x”
名称:十六进制。
结果:十六进制字符串。
支持类型:仅整型。
精度说明符:结果字符串中的位数。
示例:
255 (“X”) -> FF
-1 (“x”) -> ff
255 (“x4”) -> 00ff
-1 (“X4”) -> 00FF

任何其他单个字符
说明:未知说明符,在运行时引发FormatException。

二、自定义数字格式字符串:
自定义数字格式字符串由一个或多个自定义数字说明符组成,用于定义设置数值数据格式的方式。自定义数字格式字符串是任何不属于标准数字格式字符串的格式字符串。
所有数字类型的ToString方法的某些重载支持自定义数字格式字符串。例如,可将数字格式字符串提供给Int32类型的ToString(String)方法和ToString(String, IFormatProvider)方法。.NET Framework复合格式化功能也支持自定义数字格式字符串,该功能由Console和StreamWriter类的某些Write和WriteLine方法、String.Format方法以及StringBuilder.AppendFormat方法使用。
以下列出支持的自定义数字格式说明符并显示由每个格式说明符产生的示例输出:

“0”
说明:零占位符,用对应的数字(如果存在)替换零;否则,将在结果字符串中显示零。
示例:
1234.5678 (“00000”) -> 01235
0.45678 (“0.00”, en-US) -> 0.46
0.45678 (“0.00”, fr-FR) -> 0,46

“#”
说明:数字占位符,用对应的数字(如果存在)替换英镑标记;否则,不会在结果字符串中显示任何数字。
示例:
1234.5678 (“#####”) -> 1235
0.45678 (“#.##”, en-US) -> .46
0.45678 (“#.##”, fr-FR) -> ,46

“.”
说明:小数点,确定小数点分隔符在结果字符串中的位置。
示例:
0.45678 (“0.00”, en-US) -> 0.46
0.45678 (“0.00”, fr-FR) -> 0,46

“,”
说明:组分隔符和数字比例换算,用作组分隔符和数字比例换算说明符。作为组分隔符时,它在各个组之间插入本地化的组分隔符字符。作为数字比例换算说明符,对于每个指定的逗号,它将数字除以1000。
组分隔符说明符示例:
2147483647 (“##,#”, en-US) -> 2,147,483,647
2147483647 (“##,#”, es-ES) -> 2.147.483.647
比例换算说明符示例:
2147483647 (“#,#,,”, en-US) -> 2,147
2147483647 (“#,#,,”, es-ES) -> 2.147

“%”
说明:百分比占位符,将数字乘以100,并在结果字符串中插入本地化的百分比符号。
示例:
0.3697 (“%#0.00”, en-US) -> %36.97
0.3697 (“%#0.00”, el-GR) -> %36,97
0.3697 (“##.0 %”, en-US) -> 37.0 %
0.3697 (“##.0 %”, el-GR) -> 37,0 %

“‰”
说明:千分比占位符,将数字乘以1000,并在结果字符串中插入本地化的千分比符号。
示例:
0.03697 (“#0.00‰”, en-US) -> 36.97‰
0.03697 (“#0.00‰”, ru-RU) -> 36,97‰

“E0″、”E+0″、”E-0″、”e0″、”e+0″、”e-0”
说明:指数表示法,如果后跟至少一个0(零),则使用指数表示法设置结果格式。”E”或”e”指示指数符号在结果字符串中是大写还是小写。跟在”E”或”e”字符后面的零的数目确定指数中的最小位数。加号(+)指示符号字符总是置于指数前面。减号(-)指示符号字符仅置于负指数前面。
示例:
987654 (“#0.0e0”) -> 98.8e4
1503.92311 (“0.0##e+00”) -> 1.504e+03
1.8901385E-16 (“0.0e+00”) -> 1.9e-16

“\”
说明:转义符,使下一个字符被解释为文本而不是自定义格式说明符。
示例:
987654 (“\###00\#”) -> #987654#

“;”
说明:部分分隔符,通过分隔格式字符串定义正数、负数和零各部分。
示例:
12.345 (“#0.0#;(#0.0#);-\0-“) -> 12.35
0 (“#0.0#;(#0.0#);-\0-“) -> -0-
-12.345 (“#0.0#;(#0.0#);-\0-“) -> (12.35)
12.345 (“#0.0#;(#0.0#)”) -> 12.35
0 (“#0.0#;(#0.0#)”) -> 0.0
-12.345 (“#0.0#;(#0.0#)”) -> (12.35)

‘字符’或”字符串”
说明:文本字符串分隔符,指示应复制到未更改的结果字符串的封闭字符。
示例:
68 (“# ‘ degrees'”) -> 68 degrees
68 (“# ‘ degrees'”) -> 68 degrees

所有其他字符
说明:字符将复制到未更改的结果字符串。
示例:
68 (“# °”) -> 68 °

更多信息请参阅:标准数字格式字符串自定义数字格式字符串

关于C#中GUID字符串格式化的说明

在C#编程中,GUID是比较常用的,我们常常用它作为一个全球唯一标识的UUID值,其中最常用的是Guid.ToString方法:

// 获取GUID的格式化字符串作为唯一ID
string id = Guid.NewGuid().ToString();

Guid.ToString方法的作用是根据所提供的格式说明符,返回此Guid实例值的十六进制字符串表示形式。方法位于程序集 mscorlib(mscorlib.dll)命名空间System中。

一、语法定义:

/// <summary>
/// 根据所提供的格式说明符,返回此GUID实例值的字符串表示形式
/// </summary>
/// <param name="format">格式说明符</param>
/// <returns>返回GUID字符串</returns>
public string ToString(string format);

二、参数说明:
format:一个单格式说明符,它指示如何格式化此GUID的值。format参数可以是”N”、”D”、”B”、”P”或”X”。如果format为null或空字符串(””),则使用”D”。
以下列出接受的格式说明符format的可选参数。其中“0”表示一个字符,连字符(“-”),大括号(“{”,“}”),括号(“(”,“)”):

“N”:32位字符,例00000000000000000000000000000000

“D”:由连字符分隔的32+4位字符,例00000000-0000-0000-0000-000000000000

“B”:由连字符,括在大括号分隔的32+4+2位字符,例{00000000-0000-0000-0000-000000000000}

“P”:由括在括号中的连字符分隔的32+4+2位数字,例(00000000-0000-0000-0000-000000000000)

“X”:四个十六进制值括在大括号,其中第四个值是也括在大括号的八个十六进制值的子集,例{0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}

其中十六进制字符a到f是小写在返回的字符串中的,若要将它们转换成大写,可以对返回的字符串调用String.ToUpper方法。

三、调用示例:

string guid = Guid.NewGuid().ToString();
string nGuid = Guid.NewGuid().ToString("N");
string dGuid = Guid.NewGuid().ToString("D");
string bGuid = Guid.NewGuid().ToString("B");
string pGuid = Guid.NewGuid().ToString("P");
string xGuid = Guid.NewGuid().ToString("X");

更多信息请参阅:Guid.ToString 方法 (String) (System)

关于C#中字符串格式化时转义大括号“{}”的说明

今天在用C#进行开发时,当需要格式化带有大括号的字符串时,引发了FormatException(输入字符串的格式不正确)的异常:

string.Format("{x:{0},y:{1}}", x, y);

想来应该是因为大括号是格式化时占位符的一部分,需要进行转义的缘故。但是如果用常规的反斜杠“\”进行转义却并不能达到预期的效果,其实在这里只需要用两个大括号“{{”和“}}”就可以进行转义了:

string.Format("{{x:{0},y:{1}}}", x, y);