数字格式字符串,仅显示正确的2位数字

时间:2009-07-24 18:56:44

标签: .net

我知道我可以使用子字符串或其他方法,但我只是好奇是否有什么可以取代?下面让它返回“09”

String.Format({0:?}, 2009);
顺便说一句,我在试图解决这个问题时遇到了一个很好的备忘单...... http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf

5 个答案:

答案 0 :(得分:4)

我看到了这个问题,冒着被焚烧的风险,我想指出这一点:

如果你正在格式化DateTime,或者你有一个你正在格式化的日期,你可以简单地做一个ToString(“yy”)。同样,如果你只处理多年。

DateTime dt = new DateTime(2009, 1, 1); //any DateTime would do, really.
return dt.ToString("yy"); //"09"

但如果这是一些奇怪的通用我想要字符串业务的最后两个字符,最快的路线是:

string numString = someInt.ToString();
return numString.Substring(numString.Length - 2);

答案 1 :(得分:4)

如果您对更复杂的内容有合理需求,您可以随时创建自己的自定义格式提供程序:http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx

然后,您可以按照您想要的任何模式格式化字符串,并正确封装功能以便重复使用。

以下是一个例子:

class Program
{
    static void Main(string[] args)
    {
        var date = "2009";

        Console.Write(string.Format(new CustomFormatProvider(), "{0:YY}", date));

        Console.ReadKey();
    }

    public class CustomFormatProvider : IFormatProvider, ICustomFormatter
    {
        public object GetFormat(Type formatType)
        {
            if (formatType == typeof(ICustomFormatter))
                return this;
            else
                return null;
        }

        public string Format(string fmt, object arg, IFormatProvider formatProvider)
        {
            string year = arg.ToString();
            string result = string.Empty;
            fmt = fmt.Trim().ToUpper();

            if (fmt.Equals("YY")) 
                return year.Substring(2, 2);
            else if (fmt.Equals("YYYY"))
                return year;
            else 
                throw new FormatException(String.Format("{0} is not a valid format string.", fmt));

        }
    }
}

答案 2 :(得分:3)

我真的认为你应该这样做:

String s = "2009";
s.Substring(s.Length - 2);

无法格式化该字符串以限制您想要的数字位数。

答案 3 :(得分:2)

(2009 % 100).ToString("00");

答案 4 :(得分:1)

我99.9%确定无法完成此操作,除非您将年份存储在DateTime ...