.NET kitaplığında Ay için önceden tanımlanmış bir numaralandırma var mı?


99

.Net çerçevesinde aylarca resmi bir numaralandırma olup olmadığını görmek istiyorum.

Ayın kullanımının yaygınlığından ve .net çerçevesinde bu tür başka numaralandırmalar olduğu için bir tane olması bana mümkün görünüyor.

Örneğin, haftanın günleri için, Pazartesi, Salı, vb. İçeren System.DayOfWeek bir numaralandırma vardır.

Merak ediyorum, yılın ayları için bir tane var mı, yani Ocak, Şubat vb.?

Kimse biliyor mu?

Yanıtlar:


119

Yok, ancak bir ayın adını istiyorsanız kullanabilirsiniz:

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName (DateTime.Now.Month);

bu, bir dize gösterimini döndürecektir (bu durumda geçerli ayın). Not GetMonth1 13 ila argüman alır - 1 Ocak olduğunu, 13 boş dizedir.


11
Yine de bu bir sıralama değil.
Scott Wisniewski

3
Teşekkürler, ilginç cevap, aradığım şey değil, ama yine de + değerinde!
Mark Rogers

4
Kültüre özgü konuya katılıyorum, ancak neden microsoft DayOfWeek'i yarattı, bu kültüre özgü. Komik, ha?
Mark Rogers

12
Muhtemelen çeşitli kültürlerin farklı aylık takvimleri olduğundan, ancak (görünüşe göre) haftada farklı sayıda günü olan bir takvim yok. Yani sayı haftada günlerin tutarlı olsa bile isimleri değildir.
Ryan Lundy

11
Kültürel açıdan duyarlı, zamanda yolculuk yapan bir programcıysanız, ondalık haftası olan kültürler olduğunu unutmayın (örneğin, Devrimci Fransa) en.wikipedia.org/wiki/Decimal_calendar
Matthew Lock

76

Hayır yok.


3
Peki ya Microsoft.VisualBasic.MonthName?
Josh Stodola

14
Ne kadar faydalı bir cevap verdin. Belki bazı ek rehberlik daha uygun olabilirdi.
Michael Eakins

13
@ guillegr123 Bir olumsuzluğu ispatlamamı nasıl önerirsin?
David Nelson

7
Belki de olumsuzu kanıtlamaz, ancak küçük bir muhakeme usulsüz olmaz: Sıralama yoktur çünkü numaralandırmalar yerelleştirilemez. Aylar: Ocak ayının bir Rus programcı için hiçbir anlamı olmasa bile çok az şey olurdu. Bu, ay adlarını sağlayan DO işlevlerine bakılarak daha da desteklenir - bunlar bir Kültür nesnesinde bulunurlar.
Sam Axe

8
Bu soruya verilecek tek gerçek cevap için 10 olumsuz oyu karşı koymak için oy kullanmak. .NET'te aylarca resmi bir numaralandırma var mı? Hayır yok. Bu biraz mantıklıdır çünkü her takvim aynı sayıda aya sahip değildir ve belki de bu yüzden hiç tanıtılmamıştır. Ama buradaki konu bu değil. Var mı Hayır. Soru doğru cevaplandı.
sm

39

.Net çerçevesinde aylarca resmi bir numaralandırma olup olmadığını görmek istiyorum.

Hayır.

İşte daha önce hazırladığım biri. (C # Sürümü)

public enum Month
{
    NotSet = 0,
    January = 1,
    February = 2,
    March = 3,
    April = 4,
    May = 5,
    June = 6,
    July = 7,
    August = 8,
    September = 9,
    October = 10,
    November = 11,
    December = 12
}

Neden kullanmalı NotSet? Neden sadece başlamıyorsun January = 1? o zaman görevlerin geri kalanını da
kaldırabilirsin

1
@Tersosauros, çünkü o zaman, Januaryörneğin, bir sınıf için bir özellik olarak kullanılıyorsa varsayılan olacaktır . çoğu durumda bunu istemiyorum, açıkça atanmadan önce 'boş' bir değere sahip olmasını istiyorum
mart

1
Ancak @wal, 'null' değeri istiyorsanız, numaralandırmanızı null yapılabilir olarak kullanmalısınız. Sınıfınızda herkese açık Ay'ı kullanın? Ay {get; Ayarlamak; }.
oteal

7
@Tersosauros, açıkça tanımlanmamış olsa bile 0'ın her zaman bir numaralandırmanın varsayılan değeri olacağını unutmayın. Eğer NotSetçıkarıldığında ve January = 1(ve değerlerin geri kalanı, 3, 2, vb vardır) daha sonra bu enum varsayılan olacaktır(Month)0
tsemer

aynı şeyi göndermeye geldi .. cevap bu olmalı. Enum, tüm DateTime işlevlerine karşı kullanılabilir, örneğin DateTime.Now.Month == (int) Month.Ocak
Sonic Soul

32

DateTimeFormatInfo.CurrentInfo.MonthNames(bir enum değil, ancak genel olarak aradığınız şeyin DateTimeFormatInfo CurrentInfo örneğinin olduğunu düşünüyorum). Bir açılır liste istiyorsanız, bunu şöyle oluşturabilirsiniz:

List<string> monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.Take(12).ToList();
var monthSelectList = monthNames.Select(
   m => new { Id = monthNames.IndexOf(m) + 1, Name = m });

1
return Enumerable.Range (0, 11) .Select (m => new {Id = month + 1, Name = DateTimeFormatInfo.CurrentInfo.MonthNames [month]});
Keith Harrison

var months = Enumerable.Range(0, 11).Select(m => new KeyValuePair<int, string>(m + 1, DateTimeFormatInfo.CurrentInfo.MonthNames[m]));
Dan Diplo

13

Bu ad alanının "MonthNamesType" enumunda bir tane bulundu: Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.Exchange2007

Konum biraz korkutuyor ama yine de orada.


Size doğru cevabı verirdim, ancak bunun temel kitaplık .net çerçevesinin bir parçası olduğunu düşünmüyorum. Çaba ve yaratıcılık için +1.
Mark Rogers

.net 3.5'in bir parçası gibi görünüyor. Sadece nesne görüntüleyiciyi Visual Studio'da açın ve "Ocak" araması yapın ve API'deki eşleşmeler ortaya çıkıyor.
vidalsasoon

Evet, önerdiğin gibi yaptım, v3.0 klasöründe gibi görünüyor ve bu varsayılan bir kitaplık değil. Yani sanırım kütüphanede olsa da konumu idealden daha az. Sorunun gereklerine göre gri bir alanda.
Mark Rogers

+1 kesinlikle çaba gerektirir. Burada hangi dll'den bahsediyoruz?
indolentdeveloper

10

Tam olarak ne başarmaya çalışıyorsun?

İstediğiniz tek şey yılın aylarının yazılı olduğu on iki dize ise, o zaman bu özel bir biçim dizesi aracılığıyla kullanılabilir - herhangi bir tarih saatine uygulanır,

  DateTime dt = DateTime.Parse("12 January 2009";
   dt.ToString("MMM");  // prints "Jan" 
                        // (or the right abbrev is in current culture)
   dt.ToString("MMMM"); // prints "January" 
                        // (or correct sp in current culture)

Ayı başka bir nesne türünün numaralandırılmış bir özelliği olarak belirtebilmek istiyorsanız, bir DateTime alanının Month özelliği 1'den 12'ye kadar bir tamsayı döndürür ...


1
Cevabınız için teşekkürler, sadece resmi bir sıralama olup olmadığını merak ediyorum, çünkü bir tane oluşturmak üzereyim ve zaten var olup olmadığını bilmek istiyorum, bu yüzden gereksiz bir numaralandırmayı yeniden tanımlamıyorum .
Mark Rogers

1
Hayır afaik, yok, (Bir tane oluşturursanız, tamsayı değerlerini açık hale getiririm, sop bunların .Net tarafından monthNumbers temsil etmek için kullanılan 1-12 değerleriyle aynı olduğundan emin olabilirsiniz)
Charles Bretana

3

Evet, kesinlikle var. Microsoft.VisualBasic ad alanının bir parçasıdır ...

Microsoft.VisualBasic.MonthName

Ve bu ad alanıyla ilgili bir sorunu olanlarınız için, onun gerçekten .NET olduğunu ve hiçbir yere gitmediğini anlamalısınız. .

Kayıt için, MonthNameişlev dahili olarak aşağıdakileri çağırır ...

Thread.CurrentThread.CurrentCulture.DateTimeFormat.GetMonthName

1
Maalesef bu yanıt, bu sorunun konusu olan bir sıralama olmadığı için önceki yanıtla aynı soruna sahip. Yine de bilgi için teşekkürler.
Mark Rogers

@Mark: System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthNames, IEnumerable olan bir dizedir [].
user169771

1
@ user169771 - string [] bir erasyondur IEnumerableama bir erasyon değildir enum. Yani işe yaramıyor.
Mark Rogers

2

Bazı takvimlerin gerçekten 12 aydan uzun süreleri vardır: http://en.wikipedia.org/wiki/Month ancak MS'in .NET'te bir enum oluşturmamasının nedeninin bu olup olmadığını söyleyemem.

VB'de bir kopyala / yapıştırmak isteyecek olan benim gibi tembeller için:

Public Enum MonthsOfYear
    January = 1
    February = 2
    March = 3
    April = 4
    May = 5
    June = 6
    July = 7
    August = 8
    September = 9
    October = 10
    November = 11
    December = 12
End Enum

1

Emin değilim ama önsezim hayır. DateTime.Month bir tamsayı döndürür. Böyle bir numaralandırma olsaydı, muhtemelen DateTime tarafından döndürülürdü.


1

Kodlama yapmak için böyle bir şey arıyordum.

        if (DateTime.Now.Month != 1) // can't run this test in January.

içinde 1 sihirli sayıya sahiptir. buna karşılık

        if (DateTime.Now.Month != DateTime.MonthsOfYear.January) 

kendini belgeliyor


0

Bir numaralandırma oldukça faydalı olabilir, ancak istediğiniz sonucu bir formatla elde edebilirsiniz:

DateTime myDateTimeObject=DateTime.Now; //(for example)
string monthName = myDateTimeObject.ToString("MMMM");

Bu, tam ay adını (Ocak, Şubat vb.) Döndürür. myDateTimeObject.ToString("MMM")Kısa ad için kullanın (Ocak, Şubat, Mart vb.).

Belirli bir ay numaranız varsa mnthNum, hiç olmadan DateTime, her zaman şöyle bir şey kullanabilirsiniz:

string monthName=(new DateTime(2000,mnthNum,1)).ToString("MMMM");

veya

string monthName=((new DateTime(2000,1,1)).AddMonths(mnthNum-1)ToString("MMMM");

Ama bu biraz dağınık görünüyor. İlk örnek mnthNum1 ile 12 arasında olmasını gerektirir . İkinci örnek (hemen hemen) her ay sayısına izin verir ve 1 ile 12 ile sınırlı değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.