পাইথনে স্ট্রিংগুলিকে ডেটটাইমে রূপান্তর করা হচ্ছে

ভূমিকা

ডেটা বিভিন্ন আকারে উপস্থাপন করা যেতে পারে - এবং তারিখ এবং সময়গুলি উপস্থাপন করার একটি সুবিধাজনক উপায় স্ট্রিং. যাইহোক, এই তারিখ এবং সময়ের সাথে একটি পাটিগণিত পদ্ধতিতে কাজ করতে (যেমন সময়ের পার্থক্য গণনা করা, সময় যোগ করা বা অপসারণ করা ইত্যাদি) - আমাদের সেগুলিকে রূপান্তর করতে হবে datetime অবজেক্ট।

সবচেয়ে সাধারণ উত্স এক স্ট্রিং-ফরম্যাট করা তারিখের সময় REST এপিআইগুলি হল অজ্ঞেয় স্ট্রিংগুলি ফেরত দেয়, যা আমরা অন্য ফর্ম্যাটে রূপান্তর করতে পারি।

অতিরিক্তভাবে - ডেটটাইম অবজেক্টগুলির সাথে কাজ করার ক্ষেত্রে টাইমজোনগুলি একটি সাধারণ মাথাব্যথা, তাই রূপান্তর করার সময়ও আমাদের এটি সম্পর্কে ভাবতে হবে।

এই নির্দেশিকাতে - আমরা একটি স্ট্রিং তারিখ/সময়কে a-এ রূপান্তর করার উপায় দেখব datetime বিল্ট-ইন ব্যবহার করে পাইথনে অবজেক্ট datetime মডিউল, কিন্তু তৃতীয় পক্ষের মডিউল যেমন dateutil, arrow এবং মায়া, সময় অঞ্চলের জন্য অ্যাকাউন্টিং।

তারিখ সময় ব্যবহার করে স্ট্রিং রূপান্তর

সার্জারির DATETIME মডিউল তিনটি ভিন্ন অবজেক্ট টাইপ নিয়ে গঠিত: date, time, এবং datetime. দ্য date বস্তু তারিখ ধারণ করে, time সময় ধরে রাখে, এবং datetime তারিখ এবং সময় উভয়ই ধরে রাখে!

import datetime
print(f'Current date/time: {datetime.datetime.now()}')

এই কোড চালানোর ফলে হবে:

Current date/time: 2022-12-01 10:27:03.929149

যখন কোনো কাস্টম ফরম্যাটিং দেওয়া হয় না, তখন ডিফল্ট স্ট্রিং ফরম্যাট ব্যবহার করা হয়, অর্থাৎ "2022-12-01 10:27:03.929149" এর ফরম্যাট আইএসও 8601 বিন্যাস (YYYY-MM-DDTHH:MM:SS.mmmmmm). যদি আমাদের ইনপুট স্ট্রিং একটি তৈরি করতে হয় datetime অবজেক্টটি একই ISO 8601 ফরম্যাটে আছে বা আপনি যে ফরম্যাটটি আগে থেকে পাবেন তা যদি আপনি জানেন, আমরা সহজেই এটিকে পার্স করতে পারি datetime বস্তু:

import datetime

date_time_str = '2022-12-01 10:27:03.929149'

date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)

এটি চালালে তারিখ, সময় এবং তারিখ-সময় প্রিন্ট হবে:

Date: 2022-12-01
Time: 10:27:03.929149
Date-time: 2022-12-01 10:27:03.929149

এখানে, আমরা এটি ব্যবহার করি strptime() পদ্ধতি, যা দুটি আর্গুমেন্ট গ্রহণ করে:

  • স্ট্রিং-ফরম্যাট করা তারিখ
  • প্রথম যুক্তির বিন্যাস

এই ধরনের বিন্যাস উল্লেখ করা থেকে পার্সিং অনেক দ্রুত করে তোলে datetime বিন্যাসটি নিজে থেকে চেষ্টা এবং ব্যাখ্যা করার দরকার নেই, যা গণনাগতভাবে অনেক বেশি ব্যয়বহুল। রিটার্ন মান টাইপের datetime.

আমাদের উদাহরণে, "2022-12-01 10:27:03.929149" ইনপুট স্ট্রিং এবং "%Y-%m-%d %H:%M:%S.%f" আমাদের তারিখ স্ট্রিং এর বিন্যাস. ফেরত datetime মান হিসাবে সংরক্ষণ করা হয় date_time_obj.

যেহেতু এটি একটি datetime বস্তু, আমরা কল করতে পারেন date() এবং time() এর উপর সরাসরি পদ্ধতি। আপনি আউটপুট থেকে দেখতে পাচ্ছেন, এটি ইনপুট স্ট্রিং এর 'তারিখ' এবং 'সময়' অংশ প্রিন্ট করে!

টোকেন ফরম্যাট করুন

এটা বুঝতে একটি মুহূর্ত সময় নেওয়া মূল্য ফরম্যাট টোকেন - দ্য "%Y-%m-%d %H:%M:%S.%f" আগে থেকে.

প্রতিটি টোকেন তারিখ-সময়ের একটি ভিন্ন অংশকে প্রতিনিধিত্ব করে, যেমন দিন, মাস, বছর, মাস বা সপ্তাহের দিন ইত্যাদি। সমর্থিত টোকেনের তালিকা বিভিন্ন বিন্যাস সক্ষম করার জন্য যথেষ্ট ব্যাপক। সাধারণভাবে ব্যবহৃত কিছু, যা আমরা আগেও ব্যবহার করেছি:

  • %Y: বছর (4 সংখ্যা)
  • %m: মাস
  • %d: মাসের দিন
  • %H: ঘন্টা (24 ঘন্টা)
  • %M: মিনিট
  • %S: সেকেন্ড
  • %f: মাইক্রোসেকেন্ড

বিঃদ্রঃ: এই সমস্ত টোকেন, বছর ব্যতীত, শূন্য-প্যাডেড হবে বলে আশা করা হচ্ছে (অর্থাৎ আগস্ট হল 8ম মাস, এবং শূন্য-প্যাডেড 08).

স্ট্রিংকে ভিন্ন ডেটটাইম ফরম্যাটে রূপান্তর করতে strptime() ফরম্যাট টোকেন ব্যবহার করে

একটি স্ট্রিং এর বিন্যাস জানা থাকলে, এটি সহজেই a এ পার্স করা যেতে পারে datetime বস্তু ব্যবহার করে strptime(). আসুন একটি নন-তুচ্ছ উদাহরণ দেখে নেওয়া যাক যা এক ফর্ম্যাট থেকে অন্য ফর্ম্যাটে অনুবাদ করে:

import datetime

date_time_str = 'Jul 17 2022 9:20AM'
date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)

ইনপুট স্ট্রিংটি একটি ফর্ম্যাটের ছিল – “Jul 17 2022 9:20AM”। এই বিন্যাসটি জেনে, আমরা আইএসও 8601 বিন্যাসে উপাদান উপাদানগুলিকে ম্যাপ করেছি এবং এটিকে রূপান্তরিত করেছি datetime বস্তু:

Date: 2022-07-17
Time: 09:20:00
Date-time: 2022-07-17 09:20:00

এখানে সাধারণ স্ট্রিং-ফরম্যাট করা তারিখের একটি সংক্ষিপ্ত তালিকা এবং এর জন্য তাদের সংশ্লিষ্ট ফর্ম্যাটগুলি strptime():

"Jun 28 2018 at 7:40AM" -> "%b %d %Y at %I:%M%p"
"September 18, 2017, 22:19:55" -> "%B %d, %Y, %H:%M:%S"
"Sun,05/12/99,12:30PM" -> "%a,%d/%m/%y,%I:%M%p"
"Mon, 21 March, 2015" -> "%a, %d %B, %Y"
"2018-03-12T10:12:45Z" -> "%Y-%m-%dT%H:%M:%SZ"

আপনি যে কোনো বিন্যাসের একটি তারিখ-সময়ের স্ট্রিং পার্স করতে পারেন - যতক্ষণ না আপনি যে ইনপুটটি গ্রহণ করছেন তার জন্য বিন্যাস টোকেনের সঠিক স্ট্রিং ব্যবহার করেন।

টাইমজোন দিয়ে স্ট্রিংকে ডেটটাইমে রূপান্তর করুন

টাইমজোনগুলির সাথে কাজ করার সময় তারিখ-সময় পরিচালনা করা আরও জটিল হয়ে ওঠে। উপরের সমস্ত উদাহরণগুলি এখন পর্যন্ত টাইমজোন থেকে সরল। এই হিসাবে পরিচিত হয় নিষ্পাপ datetime বস্তু.

তবে datetime অবজেক্টে টাইমজোন-সম্পর্কিত ডেটা সংরক্ষণের জন্য ঠিক একটি ক্ষেত্র থাকে - tzinfo:

import datetime as dt
dtime = dt.datetime.now()

print(dtime) 
print(dtime.tzinfo) 

সার্জারির tzinfo ক্ষেত্র একটি হতে বোঝানো হয় datetime.timezone অবজেক্ট, টাইমজোন তথ্য নির্দেশ করে। এটা None ডিফল্টরূপে, এবং বোঝায় যে datetime অবজেক্ট টাইমজোন-নেইভ। টাইমজোন পরিচালনার জন্য একটি খুব সাধারণ বাহ্যিক লাইব্রেরি pytz। আপনি সেট করতে পারেন PyTz বস্তু হিসাবে tzinfo ক্ষেত্রটিও

যদি আপনার কাছে এটি ইতিমধ্যেই না থাকে - এটি এর মাধ্যমে ইনস্টল করুন:

$ pip install pytz

PyTz ব্যবহার করে, আমরা টাইম-জোন সচেতন তারিখের জন্য একটি অ্যাঙ্কর তৈরি করতে পারি, যেমন UTC:

import datetime as dt
import pytz

dtime = dt.datetime.now(pytz.utc)

print(dtime)
print(dtime.tzinfo)

আউটপুট:

2022-12-01 02:07:41.960920+00:00
UTC

এখন আর সকাল ১১টা নয়, দুপুর ২টা, কারণ আমরা কয়েক ঘণ্টা আগে টাইমজোন সেট করেছি! এই টাইমজোন পরিবর্তন করে তারিখের সময়

+00:00 গ্লোবাল কোঅর্ডিনেশন অ্যাঙ্কর হিসাবে প্রদর্শিত সময় এবং UTC সময়ের মধ্যে পার্থক্য। আমরা UTC-তে থাকার সময় সেট করেছি, তাই অফসেট 00:00। এটা একটা টাইমজোন-সচেতন বস্তু.

একইভাবে, আমরা টাইমজোনগুলির মধ্যে একই তারিখের সময়ের ব্যাখ্যা পরিবর্তন করতে পারি। আসুন একটি স্ট্রিং রূপান্তর করি, যেমন "2022-06-29 17:08:00" একটি তারিখের সময় এবং তারপরে স্থানীয়করণ এটি "আমেরিকা/নিউইয়র্ক" টাইমজোনে:

import datetime as dt
import pytz

date_time_str = '2022-06-29 17:08:00'
date_time_obj = dt.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S')

timezone = pytz.timezone('America/New_York')
timezone_date_time_obj = timezone.localize(date_time_obj)

print(timezone_date_time_obj)
print(timezone_date_time_obj.tzinfo)

বিঃদ্রঃ: স্থানীয়করণ একটি টাইমজোন-নেইভ ডেটটাইমকে টাইমজোন-সচেতন ডেটটাইমে পরিণত করে, এবং টাইমজোনকে স্থানীয় হিসাবে বিবেচনা করে। সুতরাং তারিখ সময় একই থাকে, কিন্তু ভিন্ন টাইমজোন দেওয়া হলে, এটি আর টাইমজোন থেকে সীমাহীন সময়ের একই বিন্দুকে উপস্থাপন করে না।

আমরা একই পেতে তারিখ সময় মান, অফসেট -04: 00 UTC সময়ের তুলনায়:

2022-06-29 17:08:00-04:00
America/New_York

টোকিওতে 17:08 নয় নিউ ইয়র্কে 17:08 সময়ে একই পয়েন্ট। টোকিওতে 17:08 নিউ ইয়র্কে 3:08।

সমস্ত টাইমজোন কোড/উপানামাগুলি কীভাবে খুঁজে পাবেন?

সমস্ত উপলব্ধ টাইমজোনগুলি খুঁজে পেতে, পরিদর্শন করুন৷ all_timezones ক্ষেত্র, যা উপলব্ধ সমস্ত সময় অঞ্চলগুলির একটি তালিকা:

print(f'There are {len(pytz.all_timezones)} timezones in PyTzn')
for time_zone in pytz.all_timezones:
   print(time_zone)

সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!

There are 594 timezones in PyTz

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Asmera
...

তারিখের সময় অঞ্চল পরিবর্তন করুন

আমরা একটি টাইমজোন-সচেতন এর টাইমজোন রূপান্তর করতে পারি datetime কিছু টাইমজোনের লেন্সের মাধ্যমে একটি টাইমজোন-নেইভ ডেটটাইম স্থানীয়করণের পরিবর্তে একটি অঞ্চল থেকে অন্য অঞ্চলে অবজেক্ট করুন।

এটি স্থানীয়করণ থেকে ভিন্ন, কারণ স্থানীয়করণ সময়ের মধ্যে একটি ভিন্ন বিন্দুকে প্রতিনিধিত্ব করে, কিন্তু একটি বস্তুর টাইমজোনকে রূপান্তরিত করার সময় একই বিন্দুকে ভিন্ন লেন্সের মাধ্যমে উপস্থাপন করে:

import datetime as dt
import pytz

timezone_nw = pytz.timezone('America/New_York')
nw_datetime_obj = dt.datetime.now(timezone_nw)

timezone_london = pytz.timezone('Europe/London')
london_datetime_obj = nw_datetime_obj.astimezone(timezone_london)


print('America/New_York:', nw_datetime_obj)
print('Europe/London:', london_datetime_obj)

প্রথমে, আমরা বর্তমান সময়ের সাথে একটি ডেটটাইম অবজেক্ট তৈরি করেছি এবং এটিকে "আমেরিকা/নিউইয়র্ক" টাইমজোন হিসাবে সেট করেছি। তারপর ব্যবহার করে astimezone() পদ্ধতি, আমরা এটি রূপান্তর করেছি datetime "ইউরোপ/লন্ডন" টাইমজোনে। উভয় datetimes তাদের মধ্যে একটি রেফারেন্স লিঙ্ক হিসাবে UTC অফসেট ব্যবহার করে বিভিন্ন মান প্রিন্ট করবে:

America/New_York: 2022-11-30 21:24:30.123400-05:00
Europe/London: 2022-12-01 02:24:30.123400+00:00

লন্ডনে পরের দিন 2:24 is নিউ ইয়র্কে আগের দিন 21:24 সময়ে একই পয়েন্ট যেহেতু লন্ডন 5 ঘন্টা এগিয়ে।

প্রত্যাশিত হিসাবে, তারিখ-সময়গুলি ভিন্ন কারণ তারা প্রায় 5 ঘন্টার ব্যবধানে রয়েছে৷

তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে স্ট্রিংকে ডেটটাইমে রূপান্তর করুন

পাইথনের datetime মডিউল সমস্ত বিভিন্ন ধরণের স্ট্রিংকে a তে রূপান্তর করতে পারে datetime বস্তু কিন্তু প্রধান সমস্যা হল এটি করার জন্য আপনাকে উপযুক্ত ফরম্যাটিং কোড স্ট্রিং তৈরি করতে হবে strptime() বুঝতে পারি. এই স্ট্রিং তৈরি করতে সময় লাগে এবং এটি কোডটি পড়া কঠিন করে তোলে।

পরিবর্তে, আমরা এটি সহজ করতে অন্যান্য তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করতে পারি।

কিছু ক্ষেত্রে এই থার্ড-পার্টি লাইব্রেরিতে তারিখ-সময় ম্যানিপুলেট এবং তুলনা করার জন্য আরও ভাল অন্তর্নির্মিত সমর্থন রয়েছে এবং কিছুতে টাইমজোন অন্তর্নির্মিত রয়েছে, তাই আপনাকে অতিরিক্ত PyTz প্যাকেজ অন্তর্ভুক্ত করার দরকার নেই।

আসুন নিম্নলিখিত বিভাগে এই লাইব্রেরির কয়েকটির দিকে নজর দেওয়া যাক।

dateutil দিয়ে স্ট্রিংকে ডেটটাইমে রূপান্তর করুন

সার্জারির dateutil মডিউল একটি এক্সটেনশন হয় datetime মডিউল একটি সুবিধা হল একটি স্ট্রিং পার্স করার জন্য আমাদের কোনো পার্সিং কোড পাস করতে হবে না!

পাইথন ব্যবহার করে ফর্ম্যাট টোকেন ছাড়াই একটি স্ট্রিংকে ডেটটাইমে স্বয়ংক্রিয়ভাবে রূপান্তর করতে dateutil:

from dateutil.parser import parse
datetime = parse('2018-06-29 22:21:41')

print(datetime)

এই parse ফাংশন স্বয়ংক্রিয়ভাবে স্ট্রিং পার্স করবে! আপনাকে কোনো ফরম্যাট স্ট্রিং অন্তর্ভুক্ত করতে হবে না। চলুন বিভিন্ন ধরনের স্ট্রিং ব্যবহার করে পার্স করার চেষ্টা করি dateutil:

from dateutil.parser import parse

date_array = [
    '2018-06-29 08:15:27.243860',
    'Jun 28 2018 7:40AM',
    'Jun 28 2018 at 7:40AM',
    'September 18, 2017, 22:19:55',
    'Sun, 05/12/1999, 12:30PM',
    'Mon, 21 March, 2015',
    '2018-03-12T10:12:45Z',
    '2018-06-29 17:08:00.586525+00:00',
    '2018-06-29 17:08:00.586525+05:00',
    'Tuesday , 6th September, 2017 at 4:30pm'
]

for date in date_array:
    print('Parsing: ' + date)
    dt = parse(date)
    print(dt.date())
    print(dt.time())
    print(dt.tzinfo)
    print('n')

আউটপুট:

Parsing: 2018-06-29 08:15:27.243860
2018-06-29
08:15:27.243860
None

Parsing: Jun 28 2018 7:40AM
2018-06-28
07:40:00
None

Parsing: Jun 28 2018 at 7:40AM
2018-06-28
07:40:00
None

Parsing: September 18, 2017, 22:19:55
2017-09-18
22:19:55
None

Parsing: Sun, 05/12/1999, 12:30PM
1999-05-12
12:30:00
None

Parsing: Mon, 21 March, 2015
2015-03-21
00:00:00
None

Parsing: 2018-03-12T10:12:45Z
2018-03-12
10:12:45
tzutc()

Parsing: 2018-06-29 17:08:00.586525+00:00
2018-06-29
17:08:00.586525
tzutc()

Parsing: 2018-06-29 17:08:00.586525+05:00
2018-06-29
17:08:00.586525
tzoffset(None, 18000)

Parsing: Tuesday , 6th September, 2017 at 4:30pm
2017-09-06
16:30:00
None

আপনি দেখতে পাচ্ছেন যে প্রায় যেকোনো ধরনের স্ট্রিং ব্যবহার করে সহজেই পার্স করা যায় dateutil মডিউল।

যদিও এটি সুবিধাজনক, আগে থেকে মনে রাখবেন যে ফর্ম্যাটটি ভবিষ্যদ্বাণী করা কোডটিকে অনেক ধীর করে দেয়, তাই যদি আপনার কোডের জন্য উচ্চ কার্যক্ষমতার প্রয়োজন হয় তবে এটি আপনার অ্যাপ্লিকেশনের জন্য সঠিক পদ্ধতি নাও হতে পারে।

মায়া দিয়ে স্ট্রিংকে ডেটটাইমে রূপান্তর করুন

মায়া এছাড়াও একটি স্ট্রিং পার্স করা এবং টাইমজোন পরিবর্তন করা খুব সহজ করে তোলে। পাইথনের মায়া দিয়ে সহজেই একটি স্ট্রিং রূপান্তর করতে:

import maya

dt = maya.parse('2018-04-29T17:45:25Z').datetime()
print(dt.date())
print(dt.time())
print(dt.tzinfo)

আউটপুট:

2018-04-29
17:45:25
UTC

সময়কে একটি ভিন্ন টাইমজোনে রূপান্তর করার জন্য:

import maya

dt = maya.parse('2018-04-29T17:45:25Z').datetime(to_timezone='America/New_York', naive=False)
print(dt.date())
print(dt.time())
print(dt.tzinfo)

আউটপুট:

2018-04-29
13:45:25
America/New_York

এখন ব্যবহার করা যে সহজ নয়? এর চেষ্টা করা যাক maya স্ট্রিংগুলির একই সেটের সাথে আমরা ব্যবহার করেছি dateutil:

import maya

date_array = [
    '2018-06-29 08:15:27.243860',
    'Jun 28 2018 7:40AM',
    'Jun 28 2018 at 7:40AM',
    'September 18, 2017, 22:19:55',
    'Sun, 05/12/1999, 12:30PM',
    'Mon, 21 March, 2015',
    '2018-03-12T10:12:45Z',
    '2018-06-29 17:08:00.586525+00:00',
    '2018-06-29 17:08:00.586525+05:00',
    'Tuesday , 6th September, 2017 at 4:30pm'
]

for date in date_array:
    print('Parsing: ' + date)
    dt = maya.parse(date).datetime()
    print(dt)
    
    
    
    

আউটপুট:

Parsing: 2018-06-29 08:15:27.243860
2018-06-29 08:15:27.243860+00:00

Parsing: Jun 28 2018 7:40AM
2018-06-28 07:40:00+00:00

Parsing: Jun 28 2018 at 7:40AM
2018-06-28 07:40:00+00:00

Parsing: September 18, 2017, 22:19:55
2017-09-18 22:19:55+00:00

Parsing: Sun, 05/12/1999, 12:30PM
1999-05-12 12:30:00+00:00

Parsing: Mon, 21 March, 2015
2015-03-21 00:00:00+00:00

Parsing: 2018-03-12T10:12:45Z
2018-03-12 10:12:45+00:00

Parsing: 2018-06-29 17:08:00.586525+00:00
2018-06-29 17:08:00.586525+00:00

Parsing: 2018-06-29 17:08:00.586525+05:00
2018-06-29 12:08:00.586525+00:00

Parsing: Tuesday , 6th September, 2017 at 4:30pm
2017-09-06 16:30:00+00:00

আপনি দেখতে পাচ্ছেন, সমস্ত তারিখ বিন্যাস সফলভাবে পার্স করা হয়েছে!

যদি আমরা টাইমজোন তথ্য প্রদান না করি, তাহলে এটি স্বয়ংক্রিয়ভাবে এটিকে ইউটিসি-তে রূপান্তরিত করে। সুতরাং, এটা লক্ষ্য করা গুরুত্বপূর্ণ যে আমরা অবশ্যই সরবরাহ to_timezone এবং naive সময় UTC-তে না থাকলে পরামিতি।

তীর দিয়ে স্ট্রিংকে ডেটটাইমে রূপান্তর করুন

তীর পাইথনে তারিখ সময় নিয়ে কাজ করার জন্য আরেকটি লাইব্রেরি। এবং সাথে আগের মত maya, এটি স্বয়ংক্রিয়ভাবে তারিখ সময় বিন্যাসও বের করে। একবার ব্যাখ্যা করা হলে, এটি একটি পাইথন প্রদান করে datetime থেকে বস্তু arrow অবজেক্ট।

পাইথন ব্যবহার করে সহজেই একটি স্ট্রিংকে ডেটটাইমে রূপান্তর করতে arrow:

import arrow

dt = arrow.get('2018-04-29T17:45:25Z')
print(dt.date())
print(dt.time())
print(dt.tzinfo)

আউটপুট:

2018-04-29
17:45:25
tzutc()

এবং এখানে আপনি কিভাবে ব্যবহার করতে পারেন arrow ব্যবহার করে টাইমজোন রূপান্তর করতে to() পদ্ধতি:

import arrow

dt = arrow.get('2018-04-29T17:45:25Z').to('America/New_York')
print(dt)
print(dt.date())
print(dt.time())

আউটপুট:

2018-04-29T13:45:25-04:00
2018-04-29
13:45:25

আপনি দেখতে পাচ্ছেন যে তারিখ-সময় স্ট্রিংটি "আমেরিকা/নিউইয়র্ক" অঞ্চলে রূপান্তরিত হয়েছে।

এখন, আমরা উপরে ব্যবহার করা স্ট্রিংগুলির একই সেট আবার ব্যবহার করি:

import arrow

date_array = [
    '2018-06-29 08:15:27.243860',
    
    
    
    
    
    '2018-03-12T10:12:45Z',
    '2018-06-29 17:08:00.586525+00:00',
    '2018-06-29 17:08:00.586525+05:00',
    
]

for date in date_array:
    dt = arrow.get(date)
    print('Parsing: ' + date)
    print(dt)
    
    
    
    

এই কোডটি তারিখ-সময়ের স্ট্রিংগুলির জন্য ব্যর্থ হবে যা মন্তব্য করা হয়েছে, যা আমাদের উদাহরণগুলির অর্ধেকেরও বেশি৷ অন্যান্য স্ট্রিংগুলির আউটপুট হবে:

Parsing: 2018-06-29 08:15:27.243860
2018-06-29T08:15:27.243860+00:00

Parsing: 2018-03-12T10:12:45Z
2018-03-12T10:12:45+00:00

Parsing: 2018-06-29 17:08:00.586525+00:00
2018-06-29T17:08:00.586525+00:00

Parsing: 2018-06-29 17:08:00.586525+05:00
2018-06-29T17:08:00.586525+05:00

মন্তব্য করা তারিখ-সময়ের স্ট্রিংগুলিকে সঠিকভাবে পার্স করার জন্য, আপনাকে সংশ্লিষ্ট পাস করতে হবে ফরম্যাট টোকেন লাইব্রেরীকে কিভাবে পার্স করতে হয় তার ক্লু দিতে।

উপসংহার

এই নিবন্ধে আমরা একটি স্ট্রিং পার্স করার বিভিন্ন উপায় দেখিয়েছি datetime পাইথনে বস্তু। আপনি হয় ডিফল্ট পাইথন বেছে নিতে পারেন datetime লাইব্রেরি বা এই নিবন্ধে উল্লিখিত তৃতীয় পক্ষের লাইব্রেরি, অন্য অনেকের মধ্যে।

ডিফল্ট সঙ্গে প্রধান সমস্যা datetime প্যাকেজ হল প্রায় সব ডেট-টাইম স্ট্রিং ফরম্যাটের জন্য আমাদের পার্সিং কোড ম্যানুয়ালি নির্দিষ্ট করতে হবে। সুতরাং, যদি ভবিষ্যতে আপনার স্ট্রিং বিন্যাস পরিবর্তন হয়, তাহলে আপনাকে সম্ভবত আপনার কোডও পরিবর্তন করতে হবে। কিন্তু অনেক থার্ড-পার্টি লাইব্রেরি, যেমন এখানে উল্লেখ করা হয়েছে, এটি স্বয়ংক্রিয়ভাবে পরিচালনা করে।

আরও একটি সমস্যা যা আমরা মুখোমুখি করছি তা হল টাইমজোন নিয়ে কাজ করা। এগুলি পরিচালনা করার সর্বোত্তম উপায় হল সর্বদা আপনার ডাটাবেসে সময়টিকে UTC ফর্ম্যাটে সংরক্ষণ করা এবং তারপর প্রয়োজনে ব্যবহারকারীর স্থানীয় সময় অঞ্চলে রূপান্তর করা।

এই লাইব্রেরিগুলি কেবল স্ট্রিং পার্স করার জন্যই ভাল নয়, তবে এগুলি বিভিন্ন ধরণের তারিখ-সময় সম্পর্কিত ক্রিয়াকলাপের জন্য ব্যবহার করা যেতে পারে। কার্যকারিতাগুলি বিস্তারিতভাবে শিখতে আমি আপনাকে নথিগুলির মাধ্যমে যেতে উত্সাহিত করব৷

সময় স্ট্যাম্প:

থেকে আরো Stackabuse