我有一个字符串日期,我想分成整数:年,月和日。 例如,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
答案 0 :(得分:5)
使用Int32.Parse
后,该值为整数,而整数不具有前导数字。 "06"
只变为6。
如果要打印带有前导数字的值,则可以在将整数写入字符串时提供自定义格式:
Console.WriteLine("month is " + month.ToString("00"));
ToString("00")
告诉C#将int转换回字符串,但将其渲染为两位数(如果需要,前导为0)。
这是尝试它的小提琴:fiddle
答案 1 :(得分:4)
如果您尝试解析字符串中的日期,则应该使用DateTime.ParseExact
var str = "20160622";
var date = DateTime.ParseExact(str, "yyyyMMdd", CultureInfo.InvariantCulture);
然后,当您尝试显示每个部分时,可以使用Date format strings
答案 2 :(得分:1)
如果您需要的是" 06"的文本值,则只需解析返回的值作为整数。将它们保存为您需要的字符串。如果此后需要它们作为int,则解析字符串值并稍后使用int。
string month = dateString.Substring(4, 2);
假设:您提供的日期格式字符串是一致的。如果该日期格式发生变化,那么您当然必须采用不同的方式对其进行解析。
答案 3 :(得分:0)
当您解析为int
时,您将失去领先的0
。
解决方案#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();
答案 4 :(得分:0)
当你使用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 代表应打印的最小位数
有关格式化int的其他方法的更多信息,请查看msdn page about it
答案 5 :(得分:0)
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()
尝试此操作