سؤال

هل هناك تنسيق لطباعة أوقات 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')

الفكر الذي قد يساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top