تنسيق وقت وتاريخ بايثون بدون حشوة صفرية
-
15-11-2019 - |
سؤال
هل هناك تنسيق لطباعة أوقات Python التي لن تستخدم الحشو الصفري في التواريخ والأوقات؟
التنسيق الذي أستخدمه الآن:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
نتيجة: 29/02/2012 الساعة 05:03 مساءً
مرغوب: 29/02/2012 الساعة 5:03 مساءً
ما التنسيق الذي سيمثل الشهر كـ "2" بدلاً من "02"، والوقت كـ "5:03 مساءً" بدلاً من "05:03 مساءً"
المحلول
خيارات التنسيق المتاحة مع datetime.strftime()
سوف كل لوحة الصفر.يمكنك بالطبع تشغيل وظيفة التنسيق الخاصة بك، ولكن الحل الأسهل في هذه الحالة قد يكون معالجة النتيجة لاحقًا datetime.strftime()
:
s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
نصائح أخرى
البديل الآخر لتجنب الجانب الصفري "الكل أو لا شيء" أعلاه هو وضع علامة ناقص أمام نوع الحقل:
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
ثم هذا:'10/04/2015 03:00 صباحًا'
يصبح:'10/04/2015 الساعة 3:00 صباحًا'
يمكنك اختياريًا وضع علامة ناقص أمام اليوم إذا رغبت في ذلك.
يوفر نظام تنسيق السلسلة الجديد بديلاً لـ strftime
.إنه سهل القراءة تمامًا - في الواقع، قد يكون من الأفضل ذلك strftime
على هذا الحساب.ناهيك عن حقيقة أنها لا تحتوي على لوحة الصفر:
>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now())
'3/1/2012'
نظرًا لأنك ربما لا تريد أي حشوة في حقل الدقائق، فيمكنك القيام بذلك:
>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now)
'3/1/2012 20:00'
إذا كنت تريد وقتًا "عاديًا" بدلاً من الوقت "العسكري"، فلا يزال بإمكانك استخدام المعيار strftime
المحددات كذلك.بشكل ملائم ، لأغراضنا ، strftime
يفعل قم بتوفير رمز للوقت 12 ساعة المبطن بفارغ بدلاً من الصفر البادئ:
'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now)
'4/4/2014 6:00PM'
يصبح هذا أقل قابلية للقراءة إلى حد ما، للأسف.وكما يشير @mlissner، strftime
سيفشل في بعض الأنظمة الأساسية (الكل؟) للتواريخ قبل عام 1900.
الإجابة المقبولة ليست حلاً مناسبًا (IMHO) الطرق الموثقة الصحيحة:
في Linux يتم استبدال "#" بـ "-":
%-d، %-H، %-I، %-j، %-m، %-M، %-S، %-U، %-w، %-W، %-y، %-Y
في نظام التشغيل Windows، يتم استبدال "-" بـ "#":
%#d، %#H، %#I، %#j، %#m، %#M، %#S، %#U، %#w، %#W، %#y، %#Y
#Linux
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
# Windows
mydatetime.strftime('%#m/%d/%Y %#I:%M%p')
مصدر: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
كما ذكر ساجنيتا:خدعة التجزئة # على نظام التشغيل Windows متاحة فقط للبايثون الأصلي القابل للتنفيذ.لن يعمل هذا مع تطبيقات python المستندة إلى cygwin.
إجابة جيدة من كريس فريمان على Linux.
على النوافذ هي:
mydate.strftime('%#m/%#d/%Y')
الفكر الذي قد يساعد.