পার্স তারিখের স্ট্রিং এবং ফর্ম্যাট পরিবর্তন


115

'সোমবার 15 ফেব্রুয়ারী 2010' ফরমেটের সাথে আমার একটি ডেট স্ট্রিং রয়েছে। আমি '15 / 02/2010 'এ ফর্ম্যাটটি পরিবর্তন করতে চাই। কিভাবে আমি এটি করতে পারব?


এগুলির সকলের সদৃশ: stackoverflow.com/search?q=%5Bpython%5D+parse+ তারিখ । : এর thise সঠিক প্রতিলিপি stackoverflow.com/questions/1713594/...
S.Lott

উত্তর:


153

datetime মডিউল আপনাকে এটি সাহায্য করতে পারে:

datetime.datetime.strptime(date_string, format1).strftime(format2)

নির্দিষ্ট উদাহরণের জন্য আপনি করতে পারেন

>>> datetime.datetime.strptime('Mon Feb 15 2010', '%a %b %d %Y').strftime('%d/%m/%Y')
'15/02/2010'
>>>

2
ডেটটাইম.ডেটটাইম (সোমবার 15 ফেব্রুয়ারী 2010, "% a% b% d% Y")। স্ট্রফটাইম ("% d /% m /% Y") এটি কি সঠিক? কিন্তু আমি একটি ত্রুটি পেয়েছি।
নিম্মি

1
@ নিম্মিলিজি: আপনি আপনার মন্তব্য পোস্ট করার 10 মিনিট আগে এটি ঠিক করা হয়েছিল। এবং অবশ্যই আপনার date_stringস্ট্রিং হিসাবে থাকা উচিত ।
সাইলেন্টগোস্ট

3
একটি সম্পূর্ণ কাজের উদাহরণ দয়া করে;) কি আমদানি / ... প্রয়োজন?
কোডালিং

format1ইনপুট তারিখের স্ট্রিংয়ের ফর্ম্যাটটি প্রকাশ করতে একটি স্ট্রিং হওয়া দরকার। format2আউটপুটে লক্ষ্য স্ট্রিং বিন্যাস।
থারস্মমনার

1
আপনি আরও বিস্তারিত বলতে পারেন, এই উদাহরণটিতে ফর্ম্যাট 1 কীভাবে দেখা উচিত?
ব্যবহারকারী 1767754

59

আপনি ডেটুটিল লাইব্রেরি ইনস্টল করতে পারেন । এর মতো parseফাংশনটি বুঝতে পারে যে কোনও স্ট্রিংটি কী বিন্যাসে রয়েছে তা আপনার মতো বিন্যাসটি নির্দিষ্ট না করেই রয়েছে datetime.strptime

from dateutil.parser import parse
dt = parse('Mon Feb 15 2010')
print(dt)
# datetime.datetime(2010, 2, 15, 0, 0)
print(dt.strftime('%d/%m/%Y'))
# 15/02/2010

আইনি আইএসও স্ট্রিংয়ের সঠিক ফর্ম্যাটটি অজানা থাকলে ডেটুটিল.পারস আরও ভাল বিকল্প। আইএসওতে মাইক্রোসেকেন্ড থাকতে পারে বা নাও থাকতে পারে। এটিতে "জেড" অনুচ্ছন্নতা থাকতে পারে বা নাও থাকতে পারে। ডেটটাইম.স্ট্রিপটাইম এটির জন্য উপযুক্ত পরিমাণে নমনীয় নয়।
মাইকেল কারিভ

4
প্যাস ডেট যত্ন সহকারে ব্যবহার করা উচিত। পার্স ('12 .07.2017 ') ফেরৎ DATETIME (2017, 12, 7, ..) কিন্তু পার্স ('13 .07.2017') আয় .datetime (2017, 7, 13, ...)
ego2dot0

ইন python 3.xচাহিদা ইনস্টল করতেpython-dateutil pip install python-dateutil
এবি Abhi

24
>>> from_date="Mon Feb 15 2010"
>>> import time                
>>> conv=time.strptime(from_date,"%a %b %d %Y")
>>> time.strftime("%d/%m/%Y",conv)
'15/02/2010'

23

স্ট্রিংকে ডেটটাইম অবজেক্টে রূপান্তর করুন

from datetime import datetime
s = "2016-03-26T09:25:55.000Z"
f = "%Y-%m-%dT%H:%M:%S.%fZ"
out = datetime.strptime(s, f)
print(out)
output:
2016-03-26 09:25:55

এটি তিনি যে ফর্ম্যাটটি চেয়েছিলেন সে অনুসারে নয়, এতে এক মাসের স্ট্রিং ছিল "ফেব্রুয়ারি"।
শাহির আনসারী

@ সাহিরআনসারি আপনি " ডকস.পাইথন.আর.৩
লাইব্রেরি /

14

এই প্রশ্নটি প্রায়শই আসার সাথে সাথে এখানে এর সহজ ব্যাখ্যা explanation

datetimeবা timeমডিউল দুটি গুরুত্বপূর্ণ ফাংশন আছে।

  • স্ট্রফটাইম - একটি তারিখ সময় বা সময় অবজেক্ট থেকে তারিখ বা সময়ের একটি স্ট্রিং প্রতিনিধিত্ব তৈরি করে।
  • স্ট্রিমটাইম - একটি স্ট্রিং থেকে একটি ডেটটাইম বা টাইম অবজেক্ট তৈরি করে।

উভয় ক্ষেত্রেই আমাদের একটি বিন্যাসের স্ট্রিং দরকার। এটি উপস্থাপনা যা জানায় যে কীভাবে তারিখ বা সময়টিকে আপনার স্ট্রিংয়ে ফর্ম্যাট করা হয়।

এখন ধরে নেওয়া যাক আমাদের একটি তারিখ অবজেক্ট রয়েছে।

>>> from datetime import datetime
>>> d = datetime(2010, 2, 15)
>>> d
datetime.datetime(2010, 2, 15, 0, 0)

যদি আমরা এই তারিখ থেকে বিন্যাসে একটি স্ট্রিং তৈরি করতে চান 'Mon Feb 15 2010'

>>> s = d.strftime('%a %b %d %y')
>>> print s
Mon Feb 15 10

ধরে নেওয়া যাক আমরা এটিকে sআবার কোনও datetimeবস্তুতে রূপান্তর করতে চাই ।

>>> new_date = datetime.strptime(s, '%a %b %d %y')
>>> print new_date
2010-02-15 00:00:00

তারিখের সময় সম্পর্কিত সমস্ত ফর্ম্যাটিং নির্দেশাবলী এই দস্তাবেজটি দেখুন।


আমি আপনার ব্যাখ্যা পছন্দ।
এনহ্যান্স করুন

2

কেবলমাত্র সমাপ্তির স্বার্থে: ব্যবহারের তারিখটি বিশ্লেষণ করার সময় strptime()এবং তারিখটিতে কোনও দিন, মাস, ইত্যাদির নাম থাকে , সচেতন হন যে আপনাকে লোকেলের জন্য অ্যাকাউন্ট করতে হবে।

এটি একটি পাদটীকা হিসাবে উল্লেখ করা ডক্স হিসাবে ভাল।

উদাহরণ হিসাবে:

import locale
print(locale.getlocale())

>> ('nl_BE', 'ISO8859-1')

from datetime import datetime
datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d')

>> ValueError: time data '6-Mar-2016' does not match format '%d-%b-%Y'

locale.setlocale(locale.LC_ALL, 'en_US')
datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d')

>> '2016-03-06'

2

@ কোডেলিং এবং @ ব্যবহারকারী 1767754: নিম্নলিখিত দুটি লাইন কাজ করবে। আমি দেখেছি যে উদাহরণস্বরূপ যে সমস্যার জন্য জিজ্ঞাসা করা হয়েছিল তার সম্পূর্ণ সমাধান পোস্ট করেনি। আশা করি এটি যথেষ্ট ব্যাখ্যা।

import datetime

x = datetime.datetime.strptime("Mon Feb 15 2010", "%a %b %d %Y").strftime("%d/%m/%Y")
print(x)

আউটপুট:

15/02/2010

1

আপনি পান্ডা ব্যবহার করে এটি অর্জন করতে পারেন:

import pandas as pd

pd.to_datetime('Mon Feb 15 2010', format='%a %b %d %Y').strftime('%d/%m/%Y')

আউটপুট:

'15/02/2010'

আপনি বিভিন্ন ডেটাটাইপগুলির জন্য পান্ডাস পদ্ধতির প্রয়োগ করতে পারেন:

import pandas as pd
import numpy as np

def reformat_date(date_string, old_format, new_format):
    return pd.to_datetime(date_string, format=old_format, errors='ignore').strftime(new_format)

date_string = 'Mon Feb 15 2010'
date_list = ['Mon Feb 15 2010', 'Wed Feb 17 2010']
date_array = np.array(date_list)
date_series = pd.Series(date_list)

old_format = '%a %b %d %Y'
new_format = '%d/%m/%Y'

print(reformat_date(date_string, old_format, new_format))
print(reformat_date(date_list, old_format, new_format).values)
print(reformat_date(date_array, old_format, new_format).values)
print(date_series.apply(lambda x: reformat_date(x, old_format, new_format)).values)

আউটপুট:

15/02/2010
['15/02/2010' '17/02/2010']
['15/02/2010' '17/02/2010']
['15/02/2010' '17/02/2010']

0

ডেটটাইম লাইব্রেরি ব্যবহার করুন http://docs.python.org/library/datetime.html 9.1.7 দেখুন। স্পেশাল স্ট্রিপটাইম () স্ট্রফটাইম () আচরণের উদাহরণ http: //


নিম্মিলিজি উপরের ত্রুটির জন্য আপনার ডেটটাইম.ডেটটাইম.স্ট্রিপটাইম করা উচিত ছিল ("সোমবার 15 ফেব্রুয়ারী 2010", "% a% বি% ডি% ওয়াই")। স্ট্রাইফটাইম ("% ডি /% মি /% ওয়াই") এটি দেয় '
15/02/2010
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.