格式化包含用于在C#中打印的数字/日期的字符串变量

时间:2012-06-01 14:55:59

标签: c# string methods formatting .net

也许这是一个n00b问题,但是我已经查看了.net / C#MSDN Library并且在这个网站上还没有得出一个明确的答案...说我有For For: (这不是完全问题,因为我没有创建字符串,而是从数据库中读取它们。但是用来说明我正在使用的...)

string dob = "01/02/1990";
dob.ToString("MM/dd/YY"); //however, I can't do this. compiler gives me an error...

可能因为它已经是一个字符串了?那么当它已经是一个字符串时,我怎么能用字符串把字符串变成我想要的格式呢? 我知道我可以将它转换为其他东西(ExTime的日期时间)并使用ToString()转换回字符串...但这似乎适得其反...至少对我来说

我还有其他几种“字符串变量”,我试图将其显示为特定格式,同时将它们保存为Idictionary以打印到pdf的字段中。 例如:

d["amount"] = prod.sales.StringAmount; //(here StringSmount holds say 50000 (gotten from a DB), which I want to display as "50,000")

但是,我也做不到prod.sales.StringAmount.ToString(“N”,CultureInfo.CurrentUICulture);因为它已经是一个字符串!有没有简单的方法来做到这一点

还是需要我搞乱String Buffers或StringBuilder类? 谢谢!

5 个答案:

答案 0 :(得分:3)

您可以这样做:

DateTime dob = DateTime.Parse("01/02/1990"); 

然后

dob.ToString("MM/dd/YY");

会奏效。

请注意DateTime.Parse()有多种选项可供接受的日期时间格式使用,如果字符串不是有效日期,还会有TryParse()版本返回false - 而不是抛出异常。还有DateTime.ParseExact()DateTime.TryParseExact()种变体。

对日期时间旁边的其他数据类型使用相同的方法:首先使用各种Parse()TryParse()方法将输入字符串转换为正确的数据类型(整数,浮点等),以及然后格式化此转换的结果。

答案 1 :(得分:1)

ToString返回一个值而不修改原始值。

而不是

dob.ToString("MM/dd/YY");

使用

dob = dob.ToString("MM/dd/YY");

答案 2 :(得分:1)

首先将字符串解析为DateTime实例(通过Parse()TryParse()方法)。在DateTime实例上,您可以调用ToString(..)。

答案 3 :(得分:1)

使用上面提供的格式,您需要转换回DateTime以使用.ToString(“MM / dd / YY”)格式。 ToString的原因是用于将对象/值转换为字符串表示,而DateTime对象足以接受格式。

如果要格式化已经是字符串的内容,那么您应该使用String.Format。请访问此链接:http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx。此链接显示标准数字格式化程序。

您可能还想创建自己的字符串格式。查看IFormatProvider和ICustomFormatter:http://msdn.microsoft.com/en-us/library/system.icustomformatter.aspx

答案 4 :(得分:0)

我建议先将其解析为数字/ DateTime,然后使用字符串格式化变量。有关为什么需要这样做的示例,请考虑您的“01/02/1990”字符串在1月2日到2月1日之间不明确,除非您使用DateTime.ParseExact解析它。

我推荐这个'滚动你自己'(例如使用StringBuilder),这样你就可以使用.NET的内置文化敏感字符串格式化功能。