转换为d的正确方法

2024-04-20 01:07:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个领域,用户可以选择车辆保修。他们可以选择1年,2年和结束日期。你知道吗

当我从数据库里得到它的时候,它是单独编码的。你知道吗

当我做print(car['warranty'])我得到2019-12-20T08:59:49.897Z"

当我做print(type(car["warranty"]))我得到<type 'unicode'>。你知道吗

我如何转换它,并检查它是否是一个日期,如果它是一个或其他东西。根据我想显示的标签:

  • 如果是我要显示的日期:有效期至格式化日期
  • 如果是我想显示的数字:2年保修期

我使用python2.7。你知道吗

更新

我从数据库中得到的数据如下:

item = Item.objects.get(pk=lead.item_id)
lead_data = json.loads(item.data, object_hook=json_util.object_hook)

warranty = (lead_data['sale']['warranty_end'] if lead_data['sale']['warranty'] == '0' else get_warranty_label(str(lead_data['sale']['warranty']))) if 'sale' in lead_data else get_warranty_label('1'),

更新

lead_data['sale']如下:

{u'warranty': u'0', u'comment': u'', u'financing': u'NO', u'waranty_end': u'2019-12-30', u'usageDescription': u'', u'price': u'15000', u'financing_amount': u'0', u'label': u'', u'delivery': u'2018-12-21', u'warranty_end': u'2019-12-20T08:59:49.897Z"', u'deposit': u'0', u'kilometers': u'13000', u'usage': u'NO', u'deliveryText': u'2018-12-21', u'take_over': u'0', u'warranty_endText': u'20/12/2019', u'id': u'2af7bfe2-252f-4482-857f-8b03e28c748b', u'vat': u'21'}

Tags: id数据库jsondatagetobjecttypesale
3条回答

看看dateutil.parsedatetime也可能有用。你知道吗

from dateutil.parser import parse

def is_date(object):
    try:
        #Check if it's a date of any format.
        parse(object)
        return 'Valid until formated_date'
    except ValueError:
        #When cannot be a date
        return '2 year warranty'

您的日期是在Javascript/JSON中常见的ISO样式格式。最后的Z表示它是一个UTC日期时间;您很可能希望在某个时候将其转换为本地时间。要在Python中将其转换为datetime对象,应该使用datetime模块。datetime模块主要有三类:日期时间。日期时间, datetime.date日期以及日期时间.time分别代表日期和时间,只是日期和时间。你知道吗

其中每一个都有一个方法fromsoformat(),它接受一个ISO样式的字符串,但不幸的是,它只能从python3.7开始使用。。。你知道吗

相反,我们必须使用strptime方法,在稍微修改字符串之后,它接受一个字符串和一个格式化字符串。我将假设我们希望datetime对象保留时区信息,以便稍后可以输出所选时区中的datetime,但不幸的是strtime将不接受Z说明符(因此需要修改字符串)。你知道吗

此外,在3.2以下的python版本中,strtime将不会生成“aware”对象(aware of the timezone),即使在传递它所识别的指定时区时也是如此。因此,要做到这一点,我们必须通过这个相当复杂的faff:

def process_datestring(my_date_string):

    # In Python 3, a UTC class exists
    import datetime
    try:
        from datetime import timezone
        utc = timezone.utc
    except ImportError:
        # Python 2
        class UTC(datetime.tzinfo):
            def utcoffset(self, dt):
                return datetime.timedelta(0)

            def tzname(self, dt):
                return "UTC"

            def dst(self, dt):
                return datetime.timedelta(0)
    utc = UTC()

    # If we have a Z-terminated datetime string,
    # trim off the Z and build a UTC datetime object
    if my_date_string and my_date_string[-1] == 'Z':
        my_datetime = datetime.datetime.strptime(
            my_date_string[:-1], '%Y-%m-%dT%H:%M:%S.%f')
        my_datetime.replace(tzinfo=UTC())
        # Use this newly-created datetime object as you see fit
        return 'Valid until formated_date'

    # Otherwise, test for a simple date

    try:
        # Convert a string of form YYYY-MM-DD to a datetime object
        my_datetime = datetime.datetime.strptime(
             my_date_string, '%Y-%m-%d')
        # This datetime object is naive - it is NOT timezone aware
        return 'Valid until formated_date'
    except ValueError:
        # Unable to convert this string - perhaps it is a number?
        try:
            # This will raise an exception if my_date_string is not
            # a simple number
            float(my_date_string)
            return '2 years warranty'
        except ValueError:
            # Not a number either; most likely an unhandled date format.
            raise ValueError('Unhandled string!')

my_date_string = "2019-12-20T08:59:49.897Z"
print(process_datestring(my_date_string))
# returns 'Valid until formated_date'
my_date_string = "2019-12-20"
print(process_datestring(my_date_string))
# returns 'Valid until formated_date'
my_date_string = "3"
print(process_datestring(my_date_string))
# returns '2 years warranty'
my_date_string = "test"
print(process_datestring(my_date_string))
# raises ValueError 'Unhandled string!'

要将第一个结果转换为DateTime对象,请使用->

import datetime

date_object = datetime.datetime.strptime("2019-12-20T08:59:49.897Z", '%Y-%m-%dT%H:%M:%S.%fZ')
temp_date = date_object.date() # returns date
# then convert to date.
str(temp_date) # result '2019-12-20'

相关问题 更多 >