W tej chwili tworzę DateTime
dla każdego miesiąca i formatuję go tak, aby zawierał tylko miesiąc.
Czy istnieje inny lub lepszy sposób to zrobić?Jak wyświetlić wszystkie nazwy miesięcy, np. na combo?
Odpowiedz
można użyć do DateTimeFormatInfo
aby uzyskać te informacje:
// Will return January
string name = DateTimeFormatInfo.CurrentInfo.GetMonthName(1);
lub uzyskać wszystkie nazwy:
string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames;
Można również utworzyć nowy egzemplarz DateTimeFormatInfo
ba sed na CultureInfo
z DateTimeFormatInfo.GetInstance
lub możesz użyć właściwości aktualnej kultury CultureInfo.DateTimeFormat
.
Należy pamiętać, że kalendarze z obsługą .Net mogą trwać do 13 miesięcy, dlatego na końcu pojawi się dodatkowy pusty ciąg znaków dla kalendarzy z tylko 12 miesiącami (np. Te znalezione w en-US lub fr na przykład).
można użyć następujących powrót tablicę ciąg zawierający nazwy miesięcy
System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
Możesz otrzymać listę zlokalizowanych miesięcy z Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames
i niezmiennych miesięcy od DateTimeFormatInfo.InvariantInfo.MonthNames
.
string[] localizedMonths = Thread.CurrentThread.CurrentCulture.DateTimeFormat.MonthNames;
string[] invariantMonths = DateTimeFormatInfo.InvariantInfo.MonthNames;
for(int month = 0; month < 12; month++)
{
ListItem monthListItem = new ListItem(localizedMonths[month], invariantMonths[month]);
monthsDropDown.Items.Add(monthListItem);
}
Nie może być jakiś problem z liczbą miesięcy w roku, w zależności od rodzaju kalendarza, ale ja po prostu założyć, 12 miesięcy w tym przykładzie.
Z jakiegoś powodu kod, który złapałem, używał nazwy Invariant dla właściwości ListItem.Value. Nie wiesz dlaczego, ale zamiast tego możesz użyć liczby całkowitej. – Greg
Spróbuj wyliczanie nazw miesiącu:
for(int i = 1; i <= 12; i++){
combo.Items.Add(CultureInfo.CurrentCulture.DateTimeFormat.MonthNames[i]);
}
To w przestrzeni nazw System.Globalization.
Nadzieję, że pomaga!
Używam CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName –
Są zdefiniowane jako tablica w przestrzeniach nazw globalizacji.
using System.Globalization;
for (int i = 0; i < 12; i++) {
Console.WriteLine(CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);
}
List<string> mnt = new List<string>();
int monthCount = Convert.ToInt32(cbYear.Text) == DateTime.Now.Year ? DateTime.Now.Month : 12;
for (int i = 0; i < monthCount; i++)
{
mnt.Add(CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);
}
cbMonth.DataSource = mnt;
Metoda ta pozwala na zastosowanie listę kluczowych par wartości miesięcy do ich odpowiedników int. Generujemy go za pomocą pojedynczej linii przy użyciu zakresów zmiennych i LINQ. Hurra, kodowanie kodu LINQ!
var months = Enumerable.Range(1, 12).Select(i => new { I = i, M = DateTimeFormatInfo.CurrentInfo.GetMonthName(i) });
Aby zastosować go do listy rozwijanej ASP:
// <asp:DropDownList runat="server" ID="ddlMonths" />
ddlMonths.DataSource = months;
ddlMonths.DataTextField = "M";
ddlMonths.DataValueField = "I";
ddlMonths.DataBind();
Podobnie jak użycie Enumerable.Range, zamierzam użyć tego z listą MVC SelectListItems – John
public IEnumerable<SelectListItem> Months
{
get
{
return Enumerable.Range(1, 12).Select(x => new SelectListItem
{
Value = x.ToString(),
Text = DateTimeFormatInfo.CurrentInfo.GetMonthName(x)
});
}
}
sposób, aby pobrać do dynamiczna kultura konkretną listę nazw miesięcy w C# z LINQ.
ComboBoxName.ItemsSource=
System.Globalization.CultureInfo.
CurrentCulture.DateTimeFormat.MonthNames.
TakeWhile(m => m != String.Empty).ToList();
LUB
W tym przykładzie anonimowy obiekt tworzony jest z właściwością miesiąc i MONTHNAME
var months = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
.TakeWhile(m => m != String.Empty)
.Select((m,i) => new
{
Month = i+1,
MonthName = m
})
.ToList();
PS: Używamy metoda TakeWhile ponieważ tablica MonthNames zawiera pusty 13 miesiąc.
string[] monthNames = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
foreach (string m in monthNames) // writing out
{
Console.WriteLine(m);
}
wyjściowa:
January
February
March
April
May
June
July
August
September
October
November
December
Aktualizacja: Należy pamiętać, że dla różnych lokalizacjach/kultur, wyjście nie może być w języku angielskim. Nie testowałem tego wcześniej.
Dla Stanów Zjednoczonych tylko w języku angielskim:
string[] monthNames = (new System.Globalization.CultureInfo("en-US")).DateTimeFormat.MonthNames;
Tutaj jest dobrym przykładem dla wypełniania listy rozwijanej z miesięcy do postaci kartą kredytową:
Dim currentCulture As CultureInfo = CultureInfo.CurrentUICulture
Dim monthName, monthNumber As String
For x As Integer = 0 To 11
monthNumber = (x + 1).ToString("D2")
monthName = currentCulture.DateTimeFormat.MonthNames(x)
Dim month As New ListItem(String.Format("{0} - {1}", monthNumber, monthName),
x.ToString("D2"))
ddl_expirymonth.Items.Add(month)
Next
tworzy następujące zlokalizowana w języku potocznym, przykład :
01 - January
02 - February
etc.
Mały LINQ tylko dlatego, że jest pięknie zwięzły:
var monthOptions = DateTimeFormatInfo.CurrentInfo.MonthNames
.Where(p=>!string.IsNullOrEmpty(p))
.Select((item, index) => new { Id = index + 1, Name = item });
Potrzebujesz klauzuli Where, ponieważ kalendarz zwraca 13-miesięczną nazwę (puste w języku angielskim).
Indeks zwraca indeks w IEnumerable, więc potrzebujesz +1 dla rzeczywistego indeksu miesiąca.
- 1. Jak wyświetlić wszystkie nazwy kolumn w Netezza?
- 2. Data PHP, międzynarodowe nazwy miesięcy?
- 3. Jak wyświetlić wszystkie właściwości klas?
- 4. Jak wyświetlić wszystkie zamaskowane jednostki systemowe?
- 5. Jak wyświetlić wszystkie etykiety boxplot?
- 6. Jak wyświetlić wszystkie niesystemowe procedury przechowywane?
- 7. Dlaczego zmiana SelectedItem w jednym Combo zmienia wszystkie inne Combos?
- 8. z vboxmanage, jak wyświetlić wszystkie migawki vm?
- 9. Jak wyświetlić/uzyskać wszystkie posty ścienne konkretnej strony na Facebooku
- 10. Jak wyświetlić wszystkie etykiety X na wykresie "słupkowym"?
- 11. Jak wyświetlić wszystkie błędy sprawdzania poprawności HTML5 na raz?
- 12. Wykres kolumnowy: jak wyświetlić wszystkie etykiety na osi poziomej
- 13. Tensorflow: Jak wyświetlić obrazy niestandardowe w Tensorboard (np matplotlib wykresy)
- 14. Jak wyświetlić wszystkie daty między dwiema datami?
- 15. Jak wyświetlić wszystkie ostrzeżenia w SBT 0.11?
- 16. VB6 Combo box events
- 17. Jak wyświetlić wszystkie strony i wszystkie rozdziały za pomocą nl.siegmann.epublib
- 18. Titan db jak wyświetlić wszystkie indeksy grafów
- 19. Jak wyświetlić wszystkie słowa zawierające te znaki?
- 20. Jak wyświetlić wszystkie zakładki w NERDTree VIM?
- 21. Objective-C Jak wyświetlić wszystkie dostępne kodowania
- 22. PHP, jak wyświetlić wszystkie publiczne funkcje klasy
- 23. Jak mogę wyświetlić wszystkie właściwości obiektu Math?
- 24. ReSharper, jak wyświetlić wszystkie wskazówki? dowolna klawiatura
- 25. Google jak kontrola edycji/combo dla Delphi?
- 26. Jak uzyskać wszystkie nazwy klas w pakiecie?
- 27. Jak uzyskać wszystkie nazwy właściwości klasy Groovy?
- 28. Jak wyświetlić wszystkie metadane kolumn tabeli w bazie danych Oracle?
- 29. SharpSVN odczytuje WSZYSTKIE nazwy plików
- 30. Jak wyświetlić wszystkie pola obiektu w Objective-C?
Twój drugi przykład nie zostanie skompilowany. Musisz utworzyć nowe wystąpienie 'DateTimeFormatInfo' lub wywołać jego metodę' GetInstance() 'z klasy statycznej .e.g. 'new DateTimeFormatInfo(). MonthNames;' lub 'DateTimeFormatInfo.GetInstance(). MonthNames' –
Poprawiłem problemy zauważone przez komentarze (w przyszłości możesz po prostu edytować wpis). – user7116