我知道我可以使用子字符串或其他方法,但我只是好奇是否有什么东西可以替代?下面让它返回"09“
String.Format({0:?}, 2009);顺便说一句,我在尝试解决这个问题时遇到了一个很好的小抄…http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf
发布于 2009-07-24 19:20:45
如果您对更复杂的内容有合理的需求,您可以随时创建自己的自定义格式提供程序: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));
}
}
}发布于 2009-07-24 19:12:11
我看到了这个问题,冒着被激怒的风险,我想指出这一点:
如果您正在格式化一个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);发布于 2009-07-24 19:03:49
我真的认为你应该这样做:
String s = "2009";
s.Substring(s.Length - 2);没有办法格式化该字符串以限制您想要的位数。
https://stackoverflow.com/questions/1179512
复制相似问题