簡體   English   中英

C#子字符串缺少第一個零值

[英]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"));

“ D2”是什么意思

D代表小數, 2代表應打印的最小位數

有關格式化int的其他方法的更多信息,可以查看有關它msdn頁面

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM