【问题标题】:Formatting String Variables that contain numbers/dates for printing in C#格式化包含数字/日期的字符串变量以在 C# 中打印
【发布时间】:2012-06-06 20:00:16
【问题描述】:

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

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

可能是因为它已经是一个字符串?那么,当它已经是一个字符串时,我如何才能使用说明符将字符串转换为我想要的格式? 我知道我可以将它转换为其他东西(Ex 的 DateTime)并使用 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);因为它已经是一个字符串!有没有简单的方法来做到这一点

或者我需要弄乱字符串缓冲区或 StringBuilder 类吗? 谢谢!

【问题讨论】:

  • 仅供参考,您可以在字符串上调用 ToString() 没问题 - 但您为什么要这样做?
  • 为什么不将dob 设为DateTime 对象,并隐蔽使用ToString() ...您的dob.ToString("MM/dd/YY") 也缺少分号
  • 我在字符串上调用 ToString() 的原因:我已经将字符串字段从数据库加载到 biz 对象中......并且我 必须 对它们进行格式化以便它们打印很好地变成了pdf。因此,我不知道是否有一种简单的方法可以做到这一点。即:说我有:
  • var strdate = "07/20/1997"; var newstrdatefomat = strdate.ToString("MM/dd/yy"); 但我遇到了错误。我现在看到我将不得不使用 String.Format() 或转换并重新转换回字符串...谢谢大家的提示!

标签: c# string methods formatting .net


【解决方案1】:

你可以这样做:

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

然后

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

会起作用。

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

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

【讨论】:

    【解决方案2】:

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

    代替

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

    使用

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

    【讨论】:

    • 这似乎给了我一个错误,当我尝试它时...关于 IFormatProvider 错误..."Arguemnt type 'string' is not assignable to parameter type 'System.IFormatProvider'
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      使用上面提供的格式,您需要转换回 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

      【讨论】:

        【解决方案5】:

        我建议首先将其解析为数字/日期时间,然后使用字符串格式化变量。例如,为什么这可能是必要的,请考虑您的“01/02/1990”字符串在 1 月 2 日到 2 月 1 日之间是不明确的,除非您使用 DateTime.ParseExact 对其进行解析。

        我建议不要“自己动手”(例如使用 StringBuilder),这样您就可以使用 .NET 的内置文化敏感字符串格式化功能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-02
          • 2011-11-08
          • 1970-01-01
          • 1970-01-01
          • 2017-12-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多