相关疑难解决方法(0)

Python strftime - 没有前导0的日期?

使用Python时strftime,有没有办法删除日期的前0,如果它在10日之前,即.那011吗?找不到%那个东西?

谢谢!

python padding strftime

236
推荐指数
11
解决办法
10万
查看次数

Python中的Python时间格式不同

我可能错过了一个明显的平台差异,我应该适应但是我在尝试做时间格式时会得到这个(Python2.7)......

在Linux环境中:

>>> import time
>>> time.strftime("%a, %d-%b-%Y %T GMT", time.gmtime())
'Tue, 29-May-2012 21:42:04 GMT'
Run Code Online (Sandbox Code Playgroud)

在Windows中:

>>> import time
>>> time.strftime("%a, %d-%b-%Y %T GMT", time.gmtime())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Invalid format string
Run Code Online (Sandbox Code Playgroud)

从time.gmtime()返回的元组看起来是一样的,所以我不能完全确定我需要改变什么.

python cross-platform

16
推荐指数
1
解决办法
9051
查看次数

没有前导零的日期时间对象

我已经遇到好几个答案(123关于)去除前导零python3 datetime对象。

投票最多的答案之一指出:

在 Windows 上,您将使用 #,例如 %Y/%#m/%#d

上面的代码对我不起作用。我还尝试了 Linux 解决方案,它使用了-而不是#,但没有成功。

代码

loop_date = "1950-1-1"
date_obj = datetime.strptime(loop_date, '%Y-%m-%d') # or '%Y-%#m-%#d' which produces the errors below
date_obj += timedelta(days=1)
print(date_obj)
# This the prints `1954-01-02` but I need `1954-1-2`
Run Code Online (Sandbox Code Playgroud)

追溯:

Traceback (most recent call last):
  File "C:/collect_games.py", line 84, in <module>
    date_obj = datetime.strptime(loop_date, '%Y-%-m-%d')
  File "E:\Anaconda3\lib\_strptime.py", line 565, in _strptime_datetime
    tt, …
Run Code Online (Sandbox Code Playgroud)

python datetime python-3.x

2
推荐指数
1
解决办法
5381
查看次数

如何测试不同格式的日期和日期时间?

我有一个正在单元测试的网络应用程序。我正在尝试测试 drf 序列化器,但序列化器更改了日期时间的格式,因此格式不同的相同日期无法通过测试,因为它们不相同。

我尝试格式化序列化器 timeDateField,但它们使用的所有 strftime 格式都是零填充的,并且我的测试用户上次登录属性给出的日期没有零填充。我认为该解决方案可以按照所选答案在此处描述的方式来解决,但这似乎有点粗略,理想情况下,我作为必须维护此代码的人,想要一个更干净或更Pythonic的解决方案。

这是测试:

class UserTest(TestCase):

    def setup(self):

        last_login = datetime.datetime(2000, 1, 1, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
        date_joined = datetime.datetime(2019, 2, 2, hour=2, minute=2, second=2, microsecond=2, tzinfo=None)
        birthdate = timezone.now().date()
        renewal = timezone.now().date()

        return User.objects.create(username='test_user', first_name='test_first', last_name='test_last',
                                   email='test_mail', last_login=last_login, date_joined=date_joined,
                                   birthdate=birthdate, gender='U', renewal=renewal)

    def test_user_serializer(self):
        self.u = self.setup()
        serializer = UserSerializer(self.u, many=False)
        data = serializer.data
              .....
    # tests for serialized attributes
        self.assertEquals((data['last_login']), self.u.last_login)  # FAILING THE TEST
Run Code Online (Sandbox Code Playgroud)

这是用户序列化器:

class UserSerializer(serializers.ModelSerializer):

    last_login = …
Run Code Online (Sandbox Code Playgroud)

python datetime unit-testing django-serializer django-rest-framework

2
推荐指数
1
解决办法
1649
查看次数