Java之旅
Record my Java-learning progress.
posts - 1,comments - 17,trackbacks - 0

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

改正方法,在 run.bat 中加入:-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

因为项目中引用了很多的 jar 包,而这些 jar 包中的 class 信息会被 JBoss 的 class loader 加载到 PermGen space 区域,在 JVM 默认的情况下,该部分空间的大小只有 4M,在 jar 包非常多的情况下,显然是不够用的,所以通过 -XX:MaxPermSize=256m 指定最大值后即可解决问题。

另外,如果 heap 内存不足出现 java.lang.OutOfMemoryError: Java heap space 时,可以通过 -Xmx512m 指定最大 heap 内存来解决这样的问题。

posted @ 2011-07-22 11:47 胡昆栄 阅读(172) | 评论 (0)编辑 收藏

1.Collada类:简便,但不支持骨骼等动画信息,适合导入静止的场景模型。

import org.papervision3d.objects.parsers.Collada; //引用的Collada包

private var carcollada:Collada;//声明Collada为carcollada

var carcollada
=new Collada("模型.XML或dae");//导入外部模型文件
carcollada.addEventListener(FileLoadEvent.LOAD_COMPLETE, 完成后该怎么办的方法);


2.Dae类:声明多几步,读取慢一点,支持骨骼动画等,而且还在不断添加新的功能。

import org.papervision3d.objects.parsers.DAE;//引用的DAE包

private var cardae:DAE=new DAE(true);//声明DAE为cardae

cardae.load(
"模型.XML或dae");//导入外部模型文件
posted @ 2010-04-10 01:59 胡昆栄 阅读(873) | 评论 (0)编辑 收藏
今天在研究Flex的时候,从CVS取下的Source报以下错误:
调用可能未定义的方法 load (通过 static 类型 flash.net:FileReference 引用)。
访问可能未定义的属性 data (通过 static 类型 flash.net:FileReference 引用)。

查了API后,发现官方API与本地API对不起来,于是把FlexBuilder升级更新到3.0.2后,此问题解决。
posted @ 2010-02-02 10:21 胡昆栄 阅读(2989) | 评论 (0)编辑 收藏

使用Flex中的Tree控件时候,你可能很不喜欢它默认的外观。那个尖尖的箭头和节点前面丑陋的图标很难看。如果需要改变它,可以使用下面几个属性:

  • disclosureClosedIcon
  • disclosureOpenIcon
  • folderClosedIcon
  • folderOpenIcon
  • defaultLeafIcon
posted @ 2010-01-06 10:01 胡昆栄 阅读(533) | 评论 (0)编辑 收藏
//java 通过System.getProperties()获取系统参数

   Properties props
=System.getProperties(); //系统属性
   System.out.println("Java的运行环境版本:"+props.getProperty("java.version"));
   System.out.println(
"Java的运行环境供应商:"+props.getProperty("java.vendor"));
   System.out.println(
"Java供应商的URL:"+props.getProperty("java.vendor.url"));
   System.out.println(
"Java的安装路径:"+props.getProperty("java.home"));
   System.out.println(
"Java的虚拟机规范版本:"+props.getProperty("java.vm.specification.version"));
   System.out.println(
"Java的虚拟机规范供应商:"+props.getProperty("java.vm.specification.vendor"));
   System.out.println(
"Java的虚拟机规范名称:"+props.getProperty("java.vm.specification.name"));
   System.out.println(
"Java的虚拟机实现版本:"+props.getProperty("java.vm.version"));
   System.out.println(
"Java的虚拟机实现供应商:"+props.getProperty("java.vm.vendor"));
   System.out.println(
"Java的虚拟机实现名称:"+props.getProperty("java.vm.name"));
   System.out.println(
"Java运行时环境规范版本:"+props.getProperty("java.specification.version"));
   System.out.println(
"Java运行时环境规范供应商:"+props.getProperty("java.specification.vender"));
   System.out.println(
"Java运行时环境规范名称:"+props.getProperty("java.specification.name"));
   System.out.println(
"Java的类格式版本号:"+props.getProperty("java.class.version"));
   System.out.println(
"Java的类路径:"+props.getProperty("java.class.path"));
   System.out.println(
"加载库时搜索的路径列表:"+props.getProperty("java.library.path"));
   System.out.println(
"默认的临时文件路径:"+props.getProperty("java.io.tmpdir"));
   System.out.println(
"一个或多个扩展目录的路径:"+props.getProperty("java.ext.dirs"));
   System.out.println(
"操作系统的名称:"+props.getProperty("os.name"));
   System.out.println(
"操作系统的构架:"+props.getProperty("os.arch"));
   System.out.println(
"操作系统的版本:"+props.getProperty("os.version"));
   System.out.println(
"文件分隔符:"+props.getProperty("file.separator"));   //在 unix 系统中是"/"
   System.out.println("路径分隔符:"+props.getProperty("path.separator"));   //在 unix 系统中是":"
   System.out.println("行分隔符:"+props.getProperty("line.separator"));   //在 unix 系统中是"/n"
   System.out.println("用户的账户名称:"+props.getProperty("user.name"));
   System.out.println(
"用户的主目录:"+props.getProperty("user.home"));
   System.out.println(
"用户的当前工作目录:"+props.getProperty("user.dir"));
posted @ 2009-12-10 22:14 胡昆栄 阅读(151) | 评论 (0)编辑 收藏
916688 http://support.microsoft.com/kb/916688/) 修复: 在Windows 2000上使用与Visual Studio 2005集成的Visual SourceSafe 2005 局域网加速服务 时出现的错误消息:“无法使用SourceSafe 局域网服务”

917491 http://support.microsoft.com/kb/917491/) 修复: 使用– d 参数,Analyze.exe 实用工具可能会错误地移除Visual SourceSafe 2005中的文件和工程。

925234 http://support.microsoft.com/kb/925234/) 修复:可能无法打开或签出一个用Visual SourceSafe 2005签入的PDF文件。

927004 http://support.microsoft.com/kb/927004/) 修复: 在Visual SourceSafe 2005中对一个文件执行合并操作后,最多仅有3个帐号可以访问合并后的文件。

923842 http://support.microsoft.com/kb/923842/) 修复: 当在Visual SourceSafe 2005中使用 Analyze.exe 实用工具时,Analyze.log 文件中的错误消息: "文件 0\DATA\\ 不是一个有效的 SourceSafe 物理数据库文件" 

923434 http://support.microsoft.com/kb/923434/) 修复:用Visual SourceSafe 2005签入后的PDF文件会出错损坏。

924702 http://support.microsoft.com/kb/924702/) 修复:在Visual SourceSafe 2005中把文件类型改成了UTF8后,你不能对一个文件的最新版本与它的任何早期版本进行比较。

925275 http://support.microsoft.com/kb/925275/) 修复:当你生成一个源文件的历史报告时, Visual SourceSafe 2005 可能会意外终止

928392 http://support.microsoft.com/kb/928392/) 修复:当你在Visual SourceSafe 6.0尝试签入一个有注释模板,且注释模板超过3行的文件时出现的错误消息: "读文件错误" 

927887 http://support.microsoft.com/kb/927887/) 修复:当你在 Visual SourceSafe 2005 中用获取最新版本项去尝试获取一个最新版的XML文件时出现的的错误消息: "SourceSafe 没能完成写文件" 


930573 http://support.microsoft.com/kb/930573/) 修复:当你在 "显示历史" 对话框中生成一个报告时Visual SourceSafe 2005 可能会停止响应

932058 http://support.microsoft.com/kb/932058/) 修复: 当你尝试把IVSSItem.AutoDetectEncoding 属性的值设为 "false"时, 如果此项目被 Visual SourceSafe 2005签出,将出现错误消息: "System.Runtime.InteropServices.COMException (0x8004D67F)" 

934723 http://support.microsoft.com/kb/934723/) 修复: 在Visual SourceSafe 2005中使用 Get 命令取得一个文件的指定历史版本时,可能会收到一个错误消息。

932874 http://support.microsoft.com/kb/932874/) 修复: 当你签入一个大的二进制文件时,Visual SourceSafe 2005可能会停止响应 (挂起)

转载请注明源自www.SCMLife.com,请保留版权.
posted @ 2009-10-30 13:59 胡昆栄 阅读(1050) | 评论 (0)编辑 收藏
1377-4167-5844-4698-0048-5821
posted @ 2009-04-16 00:50 胡昆栄 阅读(937) | 评论 (0)编辑 收藏

预定义的集合元字符

使用目前提供的工具可以完成很多工作。但是,要使用 [0-9] 表示模式中的每个数值数字,或(更糟)使用 [0 -9a -zA-Z]表示任何字母数字字符,还有一段相当漫长的过程。为了减轻处理这些常用但冗长模式的痛苦,事先定义了预定义元字符集合。正则表达式的不同实现定义了不同的预定义元字符集合,下面描述的预定义元字符集合在 .NET Framework 中得到 System.Text.RegularExpressions API 的支持。这些预定义元字符的标准语法是,在反斜杠 \ 后跟一个或多个字符。多数预定义元字符只有一个字符,它们的使用很容易,是冗长字符类的理想替代字符。以下是两个示例:\d 匹配所有数值数字,\w 匹配所有单词字符(字母数字加下划线)。例外情况是一些特定字符代码匹配,此时必须指定所匹配字符的地址,如 \u000D 将匹配 Unicode 回车符。下面列出一些最常用的字符类及其等效的元字符。

元字符

等效字符类

\a

匹配铃声(警报);\u0007

\b

匹配字符类外的字边界,它匹配退格字符,\u0008

\t

匹配制表符,\u0009

\r

匹配回车符,\u000D

\w

匹配垂直制表符,\u000B

\f

匹配换页符,\u000C

\n

匹配新行,\u000A

\e

匹配转义符,\u001B

\040

匹配 3 位 8 进制 ASCII 字符。\040 表示空格(十进制数 32)。

\x20

使用 2 位 16 进制数匹配 ASCII 字符。此例中,\x2- 表示空格。

\cC

匹配 ASCII 控制字符,此例中是 ctrl-C。

\u0020

使用 4 位 16 进制数匹配 Unicode 字符。此例中 \u0020 是空格。

\*

不代表预定义字符类的任意字符都只作为该字符本身对待。因此,\* 等同于 \x 2A(是文字 *,不是 * 元字符)。

\p{name}

匹配已命名字符类“name”中的任意字符。支持名称是 Unicode 组和块范围。例如,Ll、Nd、Z、IsGreek、IsBoxDrawing 和 Sc(货币)。

\p{name}

匹配已命名字符类“name”中不包括的文本。

\w

匹配任意单词字符。对于非 Unicode 和 ECMAScript 实现,这等同于 [a-zA-Z_0-9]。在 Unicode 类别中,这等同于 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]

\W

\w 的否定,等效于 ECMAScript 兼容集合 [^a-zA-Z_0-9] 或 Unicode 字符类别 [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]

\s

匹配任意空白区域字符。等效于 Unicode 字符类 [\f\n\r\t\v\x85\p{Z}]。如果使用 ECMAScript 选项指定 ECMAScript 兼容方式,\s 等效于 [ \f\n\r\t\v] (请注意前导空格)。

\S

匹配任意非空白区域字符。等效于 Unicode 字符类别 [^\f\n\r\t\v\x85\p{Z}]。如果使用 ECMAScript 选项指定 ECMAScript 兼容方式,\S 等效于 [^ \f\n\r\t\v] (请注意 ^ 后的空格)。

\d

匹配任意十进制数字。在 ECMAScript 方式下,等效于 Unicode 的 [\p{Nd}]、非 Unicode 的 [0-9]

\D

匹配任意非十进制数字。在 ECMAScript 方式下,等效于 Unicode 的 [\p{Nd}]、非 Unicode 的 [^0-9]

返回页首

表达式示例

很多人都喜欢通过示例学习,下面即提供一些表达式示例。要获取更多示例,请访问以下地址中的正则表达式联机数据库:http://www.regexlib.com/

模式

说明

^\d{5}$

5 个数值数字,如美国邮政编码。

^(\d{5})|(\d{5}-\d{4}$

5 个数值数字或 5 个数字-短划线-4 个数字。匹配 5 位数字格式的美国邮政编码,或 5 位数字 + 4 位数字格式的美国邮政编码。

^(\d{5}(-\d{4})?$

与前一个相同,但更有效。使用 ? 可使模式中的 4 位数字成为可选部分,而不是要求分别比较不同的两个模式(通过另一种方式)。

^[+-]?\d+(\.\d+)?$

匹配任意有可选符号的实数。

^[+-]?\d*\.?\d*$

与上一个相同,但也匹配空字符串。

^(20|21|22|23|[01]\d)[0-5]\d$

匹配 24 小时制时间值。

/\*.*\*/

匹配 C 语言风格的注释 /* ... */

返回页首

ASP.NET 中的验证

ASP.NET 提供了一套验证控件,与使用旧的(或愿意的话使用传统的) ASP 处理任务相比,验证控件使在 Web 窗体上验证输入变得非常容易。其中一个非常有效的验证器是 RegularExpressionValidator,如您所料,它允许您提供必须匹配输入的正则表达式来验证输入。设置控件的 ValidationExpression 属性可指定正则表达式的模式。下面显示了验证邮政代码字段的验证程序:

<asp:RegularExpressionValidator runat="server" id="ZipCodeValidator"
ControlToValidate="ZipCodeTextBox" ErrorMessage="Invalid ZIP code
format; format should be either 12345 or 12345-6789."
ValidationExpression="(\d{5}(-\d{4})?" />

使用 RegularExpressionValidator 要注意几个问题:

  • 决不要使用验证程序要验证的控件中的空字符串来激活验证器。只有 RequiredFieldValidator 才可以捕获空字符串。

  • 您无需指定匹配字符的开始与结尾(^$)- 它们是事先假设的。如果添加了开始与结尾,也没有任何影响,不需要这样做。

  • 对于所有验证控件来说,必须在客户端以及服务器端进行验证。如果正则表达式不是 ECMAScript 兼容方式,客户端验证将失败。为了避免这种情况,确保表达式是 ECMAScript 兼容方式,否则只在服务器端进行控件验证。

返回页首

正则表达式 API

除了 ASP.NET 验证控件,在.NET 中使用正则表达式的大多数情况都要使用 System.Text.RegularExpressions 命名空间中发现的类。特别是那些您希望熟悉的主类 RegexMatchMatchCollection

顺便说一下,正则表达式缩写样式 regex 的发音究竟是 /reg-eks/ 还是 /rej-eks/,还有一些争议。本人倾向于后者,但两种发音都有专家赞同,所以选择哪个发音由您自己决定。

Regex 类有大量的方法和属性,如果您以前没有用过它,可能会感到无所适从。下面汇总了一些最常用的方法:

方法

说明

Escape / Unescape

字符串中的转义元字符,用作表达式中的文字。

IsMatch

如果正则表达式在输入字符串中发现匹配,返回“Ture”。

Match

如果在输入字符串中发现匹配,则返回匹配对象。

Matches

如果在输入字符串中发现包含任何或全部匹配,则返回匹配集合对象。

Replace

用给定的替换字符串替换输入字符串中的匹配。

Split

将输入字符串拆分成用正则表达式匹配分开的数组元素时,返回数组字符串。

除了指定很多方法外,还有一些选项可以指定,通常在 Regex 对象构造函数中。由于这些选项是位屏蔽的一部分,或许可以同时指定这些选项(如,可以同时指定 Multiline 和 Singleline)。

方法

说明

Compiled

当在循环中执行许多匹配操作时使用此选项。这可以节省每一循环的分析表达式步骤。

Multiline

它与输入字符串中的行数没有关系。确切地说,它只修改 ^$ 的方式,以便匹配行开始 (BOL) 和行结尾 (EOL),而不是匹配整个输入字符串的开始和结尾。

IgnoreCase

使模式在匹配搜索字符串时忽略大小写。

IgnorePatternWhitespace

允许根据需要在模式中包括任意数量的空白区域,也支持使用 (?# 注释 #) 语法在模式中加入注释。

SingleLine

它与输入字符串中的行数没有关系。更确切地说,它将导致 .(句点)元字符匹配任意字符,而不是除 \n 之外的任意字符(默认情况)。

使用正则表达式常执行的操作包括:验证、匹配和替换。大多数情况下,可以使用 Regex 类的静态方法完成这些操作,不需要实例化 Regex 类本身。要执行验证,全部要做的就是必建或找到正确的表达式,然后使用 Regex 类的 IsMatch() 方法将表达式应用到输入字符串中。例如,下面的函数演示了如何使用正则表达式验证邮政编码:

private void ValidateZipButton_Click(object sender, System.EventArgs e)
{
String ZipRegex = @"^\d{5}$";
if(Regex.IsMatch(ZipTextBox.Text, ZipRegex))
{
ResultLabel.Text = "ZIP is valid!";
}
else
{
ResultLabel.Text = "ZIP is invalid!";
}
}

类似的,可以使用静态 Replace() 方法将匹配替换为特定字符串,如下所示:

String newText = Regex.Replace(inputString, pattern, replacementText);

最后,可以使用如下代码遍历输入字符串的匹配集合:

private void MatchButton_Click(object sender, System.EventArgs e)
{
MatchCollection matches = Regex.Matches(SearchStringTextBox.Text,
MatchExpressionTextBox.Text);
MatchCountLabel.Text = matches.Count.ToString();
MatchesLabel.Text = "";
foreach(Match match in matches)
{
MatchesLabel.Text += "Found" + match.ToString() + " at
position " + match.Index + ".<br>";
}
}

通常,在您需要指定默认方式以外的方式时,需要实例化 Regex 类的实例。特别是在设置选项时。例如,要创建忽略大小写和模式空白区域的 Regex 实例,然后检索与该表达式匹配的集合,则应使用如下代码:

Regex re = new Regex(pattern,
    RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
MatchCollection mc = re.Matches(inputString);

本文的下载文件中包括这些示例的完整使用版本,与简单 ASP.NET 页中的一样。

返回页首

免费工具

Regulator (http://royo.is-a-geek.com/iserializable/regulator/) - 一种在客户端运行的正则表达式测试工具,通过 Web 服务与 RegexLib 紧密集成,提供对“匹配”、“拆分”和“替换”等的支持。包括性能分析和语法突出显示功能。

RegexDesigner.NET (http://www.sellsbrothers.com/tools/) - 一种功能强大的可视工具,可帮助构造并测试正则表达式。它可生成 C# 和/或 VB.NET 代码和已编译汇编代码,帮助您将表达式集成到应用程序中。

Regular Expression Workbench (v2.0) (http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=C712F2DF-B026-4D58-8961-4EE2729D7322) - Eric Gunnerson 开发的工具,用于创建、测试和研究正则表达式。具有“Examine-o-matic”功能,允许将鼠标悬停在正则表达式的上方,对其含义进行解码。

返回页首

高级主题

正则表达式有两个不得不说的功能,一个是“命名组”,另一个是“四向处理”(lookaround processing)。由于这些功能很少使用,此处只简单阐述一下。

使用命名组,您可单独命名匹配组,然后在表达式中使用程序语言引用这些组。如果结合 Replace 方法重新设置输入字符串的格式(通过重新排列顺序、替换输入字符串中的元素),这个功能特别有效。例如,假设日期使用 MM/DD/YYYY 格式的字符串,而您希望日期格式是 DD-MM-YYYY。此时,可编写一个表达式捕获第一种格式,遍历它的匹配集合,并分析每个字符串,然后使用字符串操作建立替换字符串。这需要大量的代码和大量的处理。如果使用命名组,您可完成同样的任务,具体见下:

String MDYToDMY(String input)
{
return Regex.Replace(intput, @"\b(?<month>\d{1,2})/(?<day>\d{1,2}/(?<year>\d{4})\b", "${day}-
${month}-${year}");
}

您还可以按编号或按名称引用组。在任何情况下,这种引用通称作“反向引用”。另一个经常使用反向引用的场合在匹配表达式本身,如下这个表达式用于查找重复的字母:[a-z]\1。它将匹配“aa”、“bb”、“cc”,但它不同于 [a-z]{2}[a-z][a-z],后两者是等效的,后两者允许匹配“ab”或“ac”或任何其他两个字母的组合。反向引用允许表达式记住表达式已经分析并匹配过的输入字符串中的部分字符。

“四向处理”指很多正则表达式引擎所支持的正负 Lookahead 和 Lookbehind 功能。并不是所有的正则表达式引擎都支持验证四向处理。这些构造不使用字符,即使它们可以匹配字符。有些模式可能在不使用四向处理的情况下无法描述。特别是当模式中存在的一部分依赖于另一部分,如果不使用四向处理,则不能描述这样的模式。下面介绍了每个四向处理的语法。

语法

说明

(?=...)

正 Lookahead

(?!...)

负 Lookahead

(?<=...)

正 Lookbehind

(?<!...)

负 Lookbehind

密码验证是必需四向处理的一个示例。假定在密码限制中,密码必须介于 4 到 8 个字符,且必须至少包含一个数字。为此,您可以仅在匹配中测试 \d,然后使用字符串操作来测试长度。但要在正则表达式中实现这一切,必须使用 Lookahead。特别是正 lookahead,如下所示:^(?=.*\d).{4,8}$

返回页首

结论

正则表达式是一种描述文本模式的极有效方法,它使文本模式成为字符串验证和操作的极好资源。.NET Framework 通过 System.Text.RegularExpressions 命名空间(特别是其中的 Regex 类)提供了对正则表达式的强大支持。使用 API 很简单,但编写正确的正则表达式通常比较费力。但幸运的是,正则表达式可以重复使用,您可以通过网络中的各种联机资源,从中找出其他人设计的表达式,或者在创建表达式遇到困难时得到帮助。

返回页首

资源

正则表达式库 http://www.regexlib.com/

正则表达式讨论列表 http://aspadvice.com/login.aspx?ReturnUrl=%2fSignUp%2flist.aspx%3fl%3d68%26c%3d16&l=68&c=16

正则表达式论坛 http://forums.regexadvice.com/

正则表达式 Web 日志 http://blogs.regexadvice.com/

Mastering Regular Expressions (O'Reilly),作者 Jeffrey Friedl http://www.regex.info/

.NET 正则表达式参考 http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemTextRegularExpressions.asp

Jscript 正则表达式语法 http://www.msdn.microsoft.com/library/en-us/script56/html/js56jsgrpRegExpSyntax.asp

正则表达式信息 http://www.regular-expressions.info/

作者简介

Steven A. Smith 是 Microsoft 在 ASP.NET 技术方面的最有价值专家 (MVP),是 ASPAlliance.com 和 DevAdvice.com 的总裁和所有者。此外,他也是 ASPSmith Ltd(一家重点提供 .NET 培训的公司)的所有者和首席教师。他撰写了两本著作:“ASP.NET Developer's Cookbook”和“ASP.NET By Example”,并在 MSDN 和 AspNetPRO 杂志上发表了一些文章。Steve 每年都在各种会议上发表演讲,是 INETA 联络处的成员。Steve 拥有企业管理硕士学位及计算机科学工程理学士学位。

posted @ 2008-07-10 14:29 胡昆栄 阅读(606) | 评论 (0)编辑 收藏

<OBJECT   id=WebBrowser   classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2   height=0   width=0></OBJECT>   
  
<input   type=button   value=打印           onclick=document.all.WebBrowser.ExecWB(6,1)>   
  
<input   type=button   value=直接打印   onclick=document.all.WebBrowser.ExecWB(6,6)>   
  
<input   type=button   value=页面设置   onclick=document.all.WebBrowser.ExecWB(8,1)>   
  
<input   type=button   value=打印预览   onclick=document.all.WebBrowser.ExecWB(7,1)>
posted @ 2008-06-25 13:35 胡昆栄 阅读(279) | 评论 (0)编辑 收藏

DataFormatString格式字符串
DataFormatString="{0:格式字符串}"

在DataFormatString 中的 {0} 表示数据本身,而在冒号后面的格式字符串代表所们希望数据显示的格式;

数字、货币格式:
在指定的格式符号后可以指定小数所要显示的位数。例如原来的数据为「1.56」,若格式设定为 {0:N1},则输出为「1.5」。其常用的数值格式如下表所示:

格式字符串 输入 结果
"{0:C}" 12345.6789 $12,345.68
"{0:C}" -12345.6789 ($12,345.68)
"{0:D}" 12345 12345
"{0:D8}" 12345 00012345
"{0:E}" 12345.6789 1234568E+004
"{0:E10}" 12345.6789 1.2345678900E+004
"{0:F}" 12345.6789 12345.68
"{0:F0}" 12345.6789 12346
"{0:G}" 12345.6789 12345.6789
"{0:G7}" 123456789 1.234568E8
"{0:N}" 12345.6789 12,345.68
"{0:N4}" 123456789 123,456,789.0000
"Total: {0:C}" 12345.6789 Total: $12345.68

常用的日期时间格式:

格式 说明 输出格式
d 精简日期格式 MM/dd/yyyy
D 详细日期格式 dddd, MMMM dd, yyyy
f 完整格式 (long date + short time) dddd, MMMM dd, yyyy HH:mm
F
完整日期时间格式
(long date + long time)
dddd, MMMM dd, yyyy HH:mm:ss
g 一般格式 (short date + short time) MM/dd/yyyy HH:mm
G 一般格式 (short date + long time) MM/dd/yyyy HH:mm:ss
m,M 月日格式 MMMM dd
s 适中日期时间格式 yyyy-MM-dd HH:mm:ss
t 精简时间格式 HH:mm
T 详细时间格式 HH:mm:ss

posted @ 2008-06-10 23:03 胡昆栄 阅读(498) | 评论 (0)编辑 收藏
仅列出标题