จะเอาชื่อเดือนใน C # ได้อย่างไร?


97

จะไปหาชื่อเดือนใน C # ได้อย่างไร? ฉันไม่ต้องการเขียนswitchคำสั่งหรือคำแถลงขนาดใหญ่ifในเดือนintนั้น ใน VB.Net คุณสามารถใช้ได้MonthName()แต่ C # ล่ะ?


คำตอบ:


171

คุณสามารถใช้ CultureInfo เพื่อรับชื่อเดือน คุณยังสามารถใช้ชื่อเดือนแบบสั้นรวมถึงกิจกรรมสนุก ๆ ได้อีกด้วย

ฉันขอแนะนำให้คุณใส่สิ่งเหล่านี้ลงในวิธีการขยายซึ่งจะช่วยให้คุณเขียนโค้ดน้อยลงในภายหลัง อย่างไรก็ตามคุณสามารถใช้งานได้ตามต้องการ

นี่คือตัวอย่างวิธีดำเนินการโดยใช้วิธีการขยาย:

using System;
using System.Globalization;

class Program
{
    static void Main()
    {

        Console.WriteLine(DateTime.Now.ToMonthName());
        Console.WriteLine(DateTime.Now.ToShortMonthName());
        Console.Read();
    }
}

static class DateTimeExtensions
{
    public static string ToMonthName(this DateTime dateTime)
    {
        return CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(dateTime.Month);
    }

    public static string ToShortMonthName(this DateTime dateTime)
    {
        return CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(dateTime.Month);
    }
}

หวังว่านี่จะช่วยได้!


5
ฉันขอเพิ่มว่ามีInvariantInfoคุณสมบัติที่สามารถใช้ได้เช่นกัน และในความคิดของฉันรูปแบบต่อไปนี้เป็นรูปแบบที่ง่าย / อ่านง่ายกว่าสำหรับการทำสิ่งนี้DateTimeFormatInfo.InvariantInfo.GetAbbreviatedMonthName(...)หรือDateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(...)
bsara

121

ใช้ตัวระบุรูปแบบ "MMMM":

string month = dateTime.ToString("MMMM");

17
สมมติว่าคุณมีวันที่ ถ้าไม่:var month = new DateTime(1,i,1).ToString("MMMM");
Myster

14
string CurrentMonth = String.Format("{0:MMMM}", DateTime.Now)

คุณไม่จำเป็นต้องใช้ ToString ()
Richard Anthony Hein

5
หรือ String.Format จริงๆแล้ว เพียง DateTime.Now ToString ("MMMM") นั้นง่ายกว่า
Jon Skeet

1
ฉันจะแนะนำเช่นนั้น แต่คุณมีคำตอบอื่นอยู่แล้ว วิธีการของ Gortok ยังแสดงให้เห็นถึงการใช้ตัวยึดตำแหน่งในการจัดรูปแบบดังนั้นฉันคิดว่ามันเป็นตัวอย่างทางเลือกที่ดี
Richard Anthony Hein

7

หากคุณต้องการใช้ MonthName ให้อ้างอิง Microsoft.VisualBasic และอยู่ใน Microsoft.VisualBasic.DateAndTime

//eg. Get January
String monthName = Microsoft.VisualBasic.DateAndTime.MonthName(1);

7

สมมติว่าวันนี้ของคุณคือวันนี้ หวังว่านี่จะช่วยคุณได้

DateTime dt = DateTime.Today;

string thisMonth= dt.ToString("MMMM");

Console.WriteLine(thisMonth);

-15
    private string MonthName(int m)
    {
        string res;
        switch (m)
        {
            case 1:
                res="Ene";
                break;
            case 2:
                res = "Feb";
                break;
            case 3:
                res = "Mar";
                break;
            case 4:
                res = "Abr";
                break;
            case 5:
                res = "May";
                break;
            case 6:
                res = "Jun";
                break;
            case 7:
                res = "Jul";
                break;
            case 8:
                res = "Ago";
                break;
            case 9:
                res = "Sep";
                break;
            case 10:
                res = "Oct";
                break;
            case 11:
                res = "Nov";
                break;
            case 12:
                res = "Dic";
                break;
            default:
                res = "Nulo";
                break;
        }
        return res;
    }

11
สิ่งนี้ไม่ตอบคำถามของ OP เพราะพวกเขากล่าวว่า: "ฉันไม่ต้องการเขียนคำสั่ง switch ขนาดใหญ่ [... ]" (เน้นของฉัน) โปรดอ่านคำถามโดยละเอียดก่อนเขียนคำตอบ
บีบแตร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.