[英]C# substring missing first zero value
我有一個字符串日期,我想將其拆分為整數:年,月和日。 例如,20160622應該返回year = 2016,month = 06和day =22。這是代碼:
String dateString = "20160622";
int year = Int32.Parse(dateString.Substring(0, 4));
Console.WriteLine("year is " +year);
Console.ReadKey();
int month = Int32.Parse(dateString.Substring(4, 2));
Console.WriteLine("month is " + month);
Console.ReadKey();
int jour = Int32.Parse(dateString.Substring(6, 2));
Console.WriteLine("day is " + jour);
Console.ReadKey();
當子字符串的第一個字符為'0'時,它不作為子字符串的一部分返回。 我得到以下輸出:
year is 2016
month is 6
day is 22
但我想得到
year is 2016
month is 06
day is 22
一旦使用Int32.Parse
,該值就是一個整數,並且整數沒有前導數字。 "06"
變為6。
如果要打印前導數字的值,則可以在將整數再次寫入字符串時提供自定義格式:
Console.WriteLine("month is " + month.ToString("00"));
ToString("00")
告訴C#將int轉換回字符串,但是將其呈現為兩位數字(如果需要,則以0開頭)。
這里有一個小提琴嘗試一下: 小提琴
如果您嘗試從字符串中解析日期,則應使用DateTime.ParseExact
var str = "20160622";
var date = DateTime.ParseExact(str, "yyyyMMdd", CultureInfo.InvariantCulture);
然后,當您嘗試顯示每件作品時,可以使用日期格式字符串
如果您需要的文本值為“ 06”,則只需不解析返回為整數的值。 將它們保留為所需的字符串。 如果此后需要將它們作為整數,則解析字符串值,然后再使用整數。
string month = dateString.Substring(4, 2);
假設:您提供的日期格式字符串是一致的。 如果該日期格式發生變化,那么您當然必須對它進行不同的解析。
當您解析為int
您將丟失前0
s。
解決方案#1:不解析為int:
String dateString = "20160622";
string year = dateString.Substring(0, 4);
Console.WriteLine("year is " +year);
Console.ReadKey();
string month = dateString.Substring(4, 2);
Console.WriteLine("month is " + month);
Console.ReadKey();
string jour = dateString.Substring(6, 2); // i think you mean `day`
Console.WriteLine("day is " + jour);
Console.ReadKey();
解決方案2:使用前導0格式化已解析的int
String dateString = "20160622";
int year = Int32.Parse(dateString.Substring(0, 4));
Console.WriteLine("year is " +year.ToString("D4"));
Console.ReadKey();
int month = Int32.Parse(dateString.Substring(4, 2));
Console.WriteLine("month is " + month.ToString("D2"));
Console.ReadKey();
int jour = Int32.Parse(dateString.Substring(6, 2));
Console.WriteLine("day is " + jour.ToString("D2"));
Console.ReadKey();
當您使用parse方法時,它將使用字符串中表示的值創建一個新的int,將其連接起來將只給您"6"
而不帶前導0
。
您可以通過以下方式為此使用字符串格式說明符
int month = Int32.Parse(dateString.Substring(4, 2));
//using Console.WriteLine's overload
Console.WriteLine("month is {0:D2}", month);
//using string.Format
Console.WriteLine(string.Format("month is {0:D2}",month))
//using string interpolation
Console.WriteLine($"month is {month:D2}");
//using the ToString method of the int
Console.WriteLine("month is "+ month.ToString("D2"));
D代表小數, 2代表應打印的最小位數
String dateString = "20160622";
int year = Int32.Parse(dateString.Substring(0, 4));
Console.WriteLine("year is " + year.ToString("D4"));
Console.ReadKey();
int month = Int32.Parse(dateString.Substring(4, 2));
Console.WriteLine("month is " + month.ToString("D2"));
Console.ReadKey();
int jour = Int32.Parse(dateString.Substring(6, 2));
Console.WriteLine("day is " + jour.ToString("D2"));
Console.ReadKey();
試試這個與ToString()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.