欢迎光临

木子屋

标题: DateTime.ToString格式限定符转义

作者: dnawo

日期: 2011-08-03 12:18 AM

分类: Win编程

内容: 复制内容到剪贴板 程序代码DateTime.Now.ToString("yyyy-MM-dd")
上边代码结果为：2011-08-03，其中y、M、d即为格式限定符，他们在DateTime.ToString具有限定格式意义，但在一些场合中我们希望这些字符能直接输出，即暂时取消格式限定符的作用，这就需要转义。
一、DateTime.ToString格式限定符转义
1.单个格式限定符转义
复制内容到剪贴板 程序代码DateTime.Now.ToString("year:yyyy") //11ear:2011
DateTime.Now.ToString(@"\year:yyyy") //year:2011
可见，单个格式限定符转义只需在格式限定符前加"\"即可。
2.多个格式限定符转义
复制内容到剪贴板 程序代码DateTime.Now.ToString("date:yyyy") //3a下e:2011
DateTime.Now.ToString("'date':yyyy") //year:2011
DateTime.Now.ToString("\"date\":yyyy") //year:2011
可见，将多个连续的字符放在单/双引号中可实现批量转义。
二、转义实现解析
使用Reflector查看DateTime.ToString方法，最终转到DateTimeFormat.FormatCustomized方法上，该方法相关代码片断如下：
复制内容到剪贴板 程序代码case '\\':
{
num4 = ParseNextChar(format, i);
if (num4 < 0)
{
throw new FormatException(Environment.GetResourceString("Format_InvalidString"));
}
outputBuffer.Append((char)num4);
num2 = 2;
continue;
}
case '\'':
case '"':
{
StringBuilder result = new StringBuilder();
num2 = ParseQuoteString(format, i, result);
outputBuffer.Append(result);
continue;
}
DateTimeFormat类中与上述代码相关的两个方法：
复制内容到剪贴板 程序代码private static int ParseNextChar(string format, int pos)
{
if (pos >= (format.Length - 1))
{
return -1;
}
return format[pos + 1];
}

internal static int ParseQuoteString(string format, int pos, StringBuilder result)
{
int length = format.Length;
int num2 = pos;
char ch = format[pos++];
bool flag = false;
while (pos < length)
{
char ch2 = format[pos++];
if (ch2 == ch)
{
flag = true;
break;
}
if (ch2 == '\\')
{
if (pos >= length)
{
throw new FormatException(Environment.GetResourceString("Format_InvalidString"));
}
result.Append(format[pos++]);
}
else
{
result.Append(ch2);
}
}
if (!flag)
{
throw new FormatException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Format_BadQuote"), new object[] { ch }));
}
return (pos - num2);
}

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.820 ms

返回

标题: DateTime.ToString格式限定符转义

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.820 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.867 ms

返回