我知道我可以使用子字符串或其他方法,但我只是好奇是否有什么可以取代?下面让它返回“09”
String.Format({0:?}, 2009);
顺便说一句,我在试图解决这个问题时遇到了一个很好的备忘单......
http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf
答案 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
...