Как отформатировать оси оси даты, чтобы месяцы были в буквах [дублировать]

A NullReferenceException бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.

Например:

  1. При использовании метода string пустой строки:
    string str = string.Empty;
    str.ToLower(); // throw null reference exception
    
  2. Когда свойство нулевого объекта доступно:
    Public Class Person {
        public string Name { get; set; }
    }
    Person objPerson;
    objPerson.Name  /// throw Null refernce Exception 
    
57
задан Mark_Masoul 5 August 2010 в 19:44
поделиться

8 ответов

Создание обратного словаря было бы разумным способом сделать это, потому что это довольно просто:

import calendar
dict((v,k) for k,v in enumerate(calendar.month_abbr))

или в последних версиях Python (2.7+), которые поддерживают понимание словаря:

{v: k for k,v in enumerate(calendar.month_abbr)}
60
ответ дан Stephan Schielke 25 August 2018 в 00:10
поделиться
  • 1
    это не работает для меня по какой-то причине, & gt; & gt; & gt; & gt; & gt; & gt; d = dict (v, k для k, v в calendar.month_abbr) Файл & quot; & lt; stdin & gt ;, строка 1 СинтаксисError: выражение генератора должно быть заключено в скобки, если не единственным аргументом – Mark_Masoul 5 August 2010 в 19:56
  • 2
    Хм, я сделал это, и это сработало ... d = dict ((v, k) для k, v в enumerate (calendar.month_abbr)) – Mark_Masoul 5 August 2010 в 19:58
  • 3
    @Mark_Masoul: Какая версия Python? Выглядит довольно старым. – S.Lott 5 August 2010 в 20:02
  • 4
    @ S.Lott python v2.6.4 – Mark_Masoul 5 August 2010 в 20:06
  • 5
    calendar.month_abbr не словарь, это <calendar._localized_month instance at 0x0164C9E0>. Исходная версия кода Дэвида создала синтаксические ошибки в 2.6 и 3.1 - обе потребности () вокруг v, k и оба требуют перечисления для calendar.month_abbr, которые я исправил. – Wayne Werner 5 August 2010 в 20:09

Использование модуля calendar :

Число-в-Abbr calendar.month_abbr[month_number]

Abbr-to-Number list(calendar.month_abbr).index(month_abbr)

31
ответ дан diogobernardino 25 August 2018 в 00:10
поделиться

Вот еще один способ сделать это.

monthToNum(shortMonth):

return{
        'Jan' : 1,
        'Feb' : 2,
        'Mar' : 3,
        'Apr' : 4,
        'May' : 5,
        'Jun' : 6,
        'Jul' : 7,
        'Aug' : 8,
        'Sep' : 9, 
        'Oct' : 10,
        'Nov' : 11,
        'Dec' : 12
}[shortMonth]
13
ответ дан Gi0rgi0s 25 August 2018 в 00:10
поделиться
  • 1
    вы можете сделать то же самое: month_cal = dict((v,k) for v,k in zip(calendar.month_abbr[1:], range(1, 13))), а затем month_cal[shortMonth] – Matt W. 12 July 2018 в 17:29

Вот более полный метод, который также может принимать полные имена месяцев

def month_string_to_number(string):
    m = {
        'jan': 1,
        'feb': 2,
        'mar': 3,
        'apr':4,
         'may':5,
         'jun':6,
         'jul':7,
         'aug':8,
         'sep':9,
         'oct':10,
         'nov':11,
         'dec':12
        }
    s = string.strip()[:3].lower()

    try:
        out = m[s]
        return out
    except:
        raise ValueError('Not a month')

пример:

>>> month_string_to_number("October")
10 
>>> month_string_to_number("oct")
10
10
ответ дан harryh 25 August 2018 в 00:10
поделиться

Еще одно:

def month_converter(month):
    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    return months.index(month) + 1
5
ответ дан hynekcer 25 August 2018 в 00:10
поделиться

Просто для удовольствия:

from time import strptime

strptime('Feb','%b').tm_mon
56
ответ дан joaquin 25 August 2018 в 00:10
поделиться

Источник информации: Документы Python

Чтобы получить номер месяца из имени месяца, используйте модуль datetime

import datetime
month_number = datetime.datetime.strptime(month_name, '%b').month

# To  get month name
In [2]: datetime.datetime.strftime(datetime.datetime.now(), '%a %b %d, %Y')
Out [2]: 'Thu Aug 10, 2017'

# To get just the month name, %b gives abbrevated form, %B gives full month name
# %b => Jan
# %B => January
dateteime.datetime.strftime(datetime_object, '%b')
6
ответ дан theBuzzyCoder 25 August 2018 в 00:10
поделиться

Чтобы получить имя месяца с использованием номера месяца, вы можете использовать time:

import time

mn = 11
print time.strftime('%B', time.struct_time((0, mn, 0,)+(0,)*6)) 

'November'
0
ответ дан WaKo 25 August 2018 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: