我知道我可以使用子字符串或其他方法,但我只是好奇,如果有什麼東西可以替代?下面使其返回「09」數字格式字符串只顯示正確的2位數
String.Format({0:?}, 2009);
順便說一句,我碰到一個好的小抄來試圖弄清楚這一點... http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf
我知道我可以使用子字符串或其他方法,但我只是好奇,如果有什麼東西可以替代?下面使其返回「09」數字格式字符串只顯示正確的2位數
String.Format({0:?}, 2009);
順便說一句,我碰到一個好的小抄來試圖弄清楚這一點... http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf
如果你有一些更復雜的合法需求,可以始終創建自己的自定義格式提供: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 % 100).ToString("00");
不,只是顯示完整的「2009」 – bdukes 2009-07-24 19:03:37
現在應該會更好。 – 2009-07-24 19:06:00
我99.9%肯定這不可能這樣做,除非你有存儲在一個DateTime
年......
我真的認爲你應該這樣做:
String s = "2009";
s.Substring(s.Length - 2);
沒有辦法格式化該字符串像你想限制的位數。
+1我正要張貼確切的代碼片段 – 2009-07-24 19:05:43
我看到了這個問題,並在被火燒的危險,我想指出這一點:
如果你格式化日期時間,或者你已經有了一個日期你格式化你可以簡單地做一個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);
我不會火焰你,但這些都是我不是在尋找,我只是想了解更多有關數字格式明顯的替代方法。 – JeremyWeir 2009-07-24 20:07:38
我不相信這是可能與內置的格式選項 – bdukes 2009-07-24 19:04:10
爲什麼人們upvoting答案,我特意要求不給? – JeremyWeir 2009-07-24 20:59:45