不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
DateTime.ToString格式限定符转义
编辑:dnawo 日期:2011-08-03
复制内容到剪贴板
程序代码

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
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
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;
}
{
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);
}
{
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 | 引用: 0 | 查看次数: 4457
发表评论
请登录后再发表评论!