স্থানীয় সময়ের স্ট্রিংটিকে ইউটিসিতে রূপান্তর করবেন কীভাবে?


307

আমি কীভাবে স্থানীয় সময়ে ডেটটাইম স্ট্রিং রূপান্তর করব একটি থেকে ইউটিসি সময় স্ট্রিং ?

আমি নিশ্চিত যে আমি এটি আগে করেছি, তবে এটি খুঁজে পাচ্ছি না এবং ভবিষ্যতে এসও আশা করি আমাকে (এবং অন্যদের) এটি করতে সহায়তা করবে।

ব্যাখ্যা : উদাহরণস্বরূপ, যদি আমি 2008-09-17 14:02:00আমার স্থানীয় সময় অঞ্চল (ইন +10), আমি সমতুল্য সঙ্গে একটি স্ট্রিং জেনারেট করতে চাই UTCসময়: 2008-09-17 04:02:00

এছাড়াও, http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/ থেকে মনে রাখবেন যে সাধারণভাবে এটি ডিএসটি এবং অন্যান্য ইস্যুগুলির সাথে সম্ভব নয় কারণ স্থানীয় সময় থেকে কোনও অনন্য রূপান্তর নেই ইউটিসি সময়।


1
দয়া করে সচেতন থাকুন এমকিটাইম () পদ্ধতিটি "স্থানীয় সময়" হিসাবে ইনপুট হিসাবে নেয় যা আপনার প্রত্যাশার মতো নাও হতে পারে, আমি এটি ব্যবহার করেছিলাম এবং এটি সবকিছু গোলমাল করে। দয়া করে এই লিঙ্কটি একবার দেখুন
হাইফেং জাং

উত্তর:


287

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

pytzমডিউলটি ব্যবহার করুন যা সময় অঞ্চল + ইউটিসির সম্পূর্ণ তালিকা সহ আসে। স্থানীয় টাইমজোনটি কী তা নির্ধারণ করুন, এটি থেকে একটি সময় অঞ্চল অবজেক্ট তৈরি করুন এবং এটিকে নিষ্প্রভ ডেটটাইমের সাথে সংযুক্ত করে সংযুক্ত করুন।

শেষ datetime.astimezone()অবধি, তারিখের সময়টিকে ইউটিসিতে রূপান্তর করতে পদ্ধতিটি ব্যবহার করুন ।

"2001-2-3 10:11:12" স্ট্রিংয়ের জন্য স্থানীয় সময় অঞ্চল "আমেরিকা / লস_এঞ্জেলস" ব্যবহার করে উত্স কোড:

import pytz, datetime
local = pytz.timezone ("America/Los_Angeles")
naive = datetime.datetime.strptime ("2001-2-3 10:11:12", "%Y-%m-%d %H:%M:%S")
local_dt = local.localize(naive, is_dst=None)
utc_dt = local_dt.astimezone(pytz.utc)

সেখান থেকে আপনি strftime()ইউটিসি ডেটটাইমটি প্রয়োজনীয়ভাবে ফর্ম্যাট করতে পদ্ধতিটি ব্যবহার করতে পারেন :

utc_dt.strftime ("%Y-%m-%d %H:%M:%S")

7
দয়া করে আপনার উত্তরটি নীচের কোড দিয়ে সম্পাদনা করুন: [কোড] স্থানীয়.লোকালাইজ (নিষ্পাপ) [/ কোড] ডকুমেন্টটি দেখুন: লিঙ্ক দুর্ভাগ্যক্রমে অনেক টাইমজোনগুলির জন্য পাইটজ সহ স্ট্যান্ডার্ড টাইম কনস্ট্রাক্টরের '' কাজ করে না '' tzinfo যুক্তি ব্যবহার করে। >>> ডেটটাইম (2002, 10, 27, 12, 0, 0, tzinfo = আমস্টারডাম) .স্ট্রফটাইম (fmt) '2002-10-27 12:00:00 এএমটি + 0020'
স্যাম স্টোয়েলিংটা

2
স্পষ্টতই এই পদক্ষেপটি "স্থানীয় টাইমজোনটি কী তা বোঝার জন্য" এটি শোনার চেয়ে শক্ত প্রমাণ করেছে (কার্যত অসম্ভব)।
জেসন আর। কমসস

2
@SamStoelinga দ্বারা প্রস্তাবিত স্থানীয়.লোক্যালাইজ ব্যবহার করুন, অন্যথায় আপনি দিবালোকের সঞ্চয় সময় বিবেচনা করবেন না।
এমিল স্টেনস্ট্রোম

এই উত্তরটি আমার পক্ষে খুব সহায়ক হয়েছে, তবে আমি যে সমস্যার মুখোমুখি হয়েছিলাম তা উল্লেখ করতে চাই। আপনি যদি সময় সরবরাহ করেন তবে তারিখটি না, আপনি অপ্রত্যাশিত ফলাফল পেতে পারেন। সুতরাং আপনি একটি সম্পূর্ণ টাইমস্ট্যাম্প সরবরাহ নিশ্চিত করুন।
স্টিভেন মার্কাতান্তে


144

ডেটটাইম মডিউল ডেটটাইম ইউটাকনো () ফাংশনটি বর্তমান ইউটিসি সময় পেতে ব্যবহার করা যেতে পারে।

>>> import datetime
>>> utc_datetime = datetime.datetime.utcnow()
>>> utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2010-02-01 06:59:19'

টমের উপরে উল্লিখিত লিঙ্কটি হিসাবে: http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/ বলেছেন:

ইউটিসি হ'ল দিবালোক সাশ্রয়হীন একটি সময় অঞ্চল এবং অতীতে কনফিগারেশন পরিবর্তনের পরিবর্তে একটি সময় অঞ্চল।

সর্বদা ইউটিসিতে সময় পরিমাপ করুন এবং সঞ্চয় করুন

সময়টি কোথায় নেওয়া হয়েছিল তা যদি আপনার রেকর্ড করতে হয় তবে এটিকে আলাদাভাবে সংরক্ষণ করুন। স্থানীয় সময় + টাইমজোন তথ্য সংরক্ষণ করবেন না !

বিঃদ্রঃ - আপনার কোনও ডেটা যদি এমন কোনও অঞ্চলে থাকে যা ডিএসটি ব্যবহার করে তবে ব্যবহার করুনpytz করে তবে জন মিলিকিনের উত্তরটি দেখুন এবং একবার দেখুন।

আপনি যদি কোনও প্রদত্ত স্ট্রিং থেকে ইউটিসি সময়টি পেতে চান এবং আপনার ভাগ্যবান বিশ্বের এমন একটি অঞ্চলে থাকতে পারে যা হয় ডিএসটি ব্যবহার করে না, বা আপনার কাছে এমন ডেটা রয়েছে যা কেবলমাত্র ইউটিসি থেকে ডিএসটি প্রয়োগ না করে অফসেট করা থাকে:

-> অফসেট মানের ভিত্তি হিসাবে স্থানীয় সময় ব্যবহার:

>>> # Obtain the UTC Offset for the current system:
>>> UTC_OFFSET_TIMEDELTA = datetime.datetime.utcnow() - datetime.datetime.now()
>>> local_datetime = datetime.datetime.strptime("2008-09-17 14:04:00", "%Y-%m-%d %H:%M:%S")
>>> result_utc_datetime = local_datetime + UTC_OFFSET_TIMEDELTA
>>> result_utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2008-09-17 04:04:00'

-> অথবা ডেটটাইম.টিমেডেলটা () ব্যবহার করে একটি পরিচিত অফসেট থেকে:

>>> UTC_OFFSET = 10
>>> result_utc_datetime = local_datetime - datetime.timedelta(hours=UTC_OFFSET)
>>> result_utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2008-09-17 04:04:00'

হালনাগাদ:

যেহেতু পাইথন ৩.২ datetime.timezoneপাওয়া যায়। আপনি নীচের কমান্ডের সাহায্যে টাইমজোন সচেতন ডেটটাইম অবজেক্ট তৈরি করতে পারেন:

import datetime

timezone_aware_dt = datetime.datetime.now(datetime.timezone.utc)

আপনার যদি টাইমজোন রূপান্তর নিতে প্রস্তুত হয় তবে এটি পড়ুন:

https://medium.com/@eleroy/10-things-you-need-to-know-about-date-and-time-in-python-with-datetime-pytz-dateutil-timedelta-309bfbafb3f7


14
এটি কেবলমাত্র বর্তমান সময়কে রূপান্তর করে, আমাকে যে কোনও সময় নিতে হবে (স্ট্রিং হিসাবে) এবং ইউটিসিতে রূপান্তর করতে হবে।
টম

আপনি যদি মানসম্পন্ন অফসেট মান ব্যবহার করেন তবে এটি এখানে গুরুত্বপূর্ণ হওয়া উচিত বলে আমি মনে করি না। স্থানীয়_কাল = utc_time + utc_offset এবং utc_time = স্থানীয়_কাল - utc_offset।
monkut

5
এটি কেবলমাত্র বর্তমান সময়ের সাথেই কাজ করে কারণ অতীত এবং ভবিষ্যতের টাইমস্ট্যাম্পগুলিতে ডিএসটি কারণে আলাদা ইউটিসি অফসেট থাকতে পারে।
অ্যালেক্স বি

ভাল কথা ... আপনার যদি ডিএসটি মোকাবেলা করতে হয় তবে জন মিলিকিন বলেছিলেন আপনার সম্ভবত পাইটজ ব্যবহার করা উচিত।
monkut

1
অবকাউন () এবং এখন () এর কলগুলির মধ্যে একটি বিক্ষিপ্ত ব-দ্বীপ রয়েছে। এটি একটি বিপজ্জনক কোড লাইন যা পরে tzinfo.utcoffset() must return a whole number of minutesএবং এর মতো আরও অদ্ভুত ত্রুটির দিকে পরিচালিত করতে পারে ।
পাভেল ভ্লাসভ

62

ধন্যবাদ @ রফ্লাই, স্ট্রিং থেকে স্ট্রিংয়ে সম্পূর্ণ রূপান্তরটি নিম্নরূপ:

time.strftime("%Y-%m-%d %H:%M:%S", 
              time.gmtime(time.mktime(time.strptime("2008-09-17 14:04:00", 
                                                    "%Y-%m-%d %H:%M:%S"))))

আমার time/ calendarক্রিয়াকলাপগুলির সংক্ষিপ্তসার :

time.strptime
স্ট্রিং -> টিপল (কোনও টাইমজোন প্রয়োগ করা হয়নি, সুতরাং স্ট্রিংয়ের সাথে মেলে)

time.mktime
স্থানীয় সময় দ্বিধা -> যুগের আগে সেকেন্ড (সর্বদা স্থানীয় সময়)

time.gmtime
যুগে যুগে যুগে যুগে>> ইউটিসিতে টিপল

এবং

calendar.timegm
যুগের আগে থেকে ইউটিসি -> সেকেন্ডে টিপল

time.localtime
স্থানীয় সময় অঞ্চলে যুগে যুগে>> টিপল


4
(always local time)ভুল বলে মনে হচ্ছে: এমকিটাইম () এ ইনপুটটি স্থানীয় সময়, আউটপুটটি ইপোচ (সেকেন্ড 1970-01-01 00:00:00 +0000 (UTC)) থেকে সময়সীমার উপর নির্ভর করে না seconds
jfs

3
এছাড়াও এটি ডিএসটি রূপান্তরকালে 50% সুযোগ ব্যর্থ হয়। লোকালটাইম সহ সমস্যাগুলি
jfs

38

এখানে পাইথনের সাধারণ রূপান্তরগুলির একটি সংক্ষিপ্তসার।

কিছু পদ্ধতি সেকেন্ডের ভগ্নাংশ ড্রপ, এবং দিয়ে চিহ্নিত করা (গুলি)ts = (d - epoch) / unitপরিবর্তে ব্যবহার করা যেতে পারে যেমন একটি সুস্পষ্ট সূত্র (ধন্যবাদ jfs)।

  • স্ট্রাক্ট_টাইম (ইউটিসি) OS পজিক্স ( গুলি) :
    calendar.timegm(struct_time)
  • ন্যাভ ডেটটাইম (লোকাল) OS পসিক্স (গুলি) :
    calendar.timegm(stz.localize(dt, is_dst=None).utctimetuple())
    (ডিএসটি স্থানান্তরের সময় ব্যতিক্রম, জেএফএস থেকে মন্তব্য দেখুন)
  • ন্যাভ ডেটটাইম (ইউটিসি) OS পসিক্স ( গুলি) :
    calendar.timegm(dt.utctimetuple())
  • সচেতন তারিখের সময় → পসিক্স (গুলি) :
    calendar.timegm(dt.utctimetuple())
  • পসিক্স → স্ট্রাক্টটাইম (ইউটিসি, গুলি ):
    time.gmtime(t)
    (জেএফএস থেকে মন্তব্য দেখুন)
  • ন্যাভেট ডেটটাইম (স্থানীয়) → স্ট্রাক্টটাইম (ইউটিসি, গুলি ):
    stz.localize(dt, is_dst=None).utctimetuple()
    (ডিএসটি রূপান্তরের সময় ব্যতিক্রম, জেএফএস থেকে মন্তব্য দেখুন)
  • ন্যাভেট ডেটটাইম (ইউটিসি) → স্ট্রাক্টটাইম (ইউটিসি, গুলি ):
    dt.utctimetuple()
  • সচেতন তারিখের সময় → স্ট্রাক্টটাইম (ইউটিসি, গুলি ):
    dt.utctimetuple()
  • পজিক্স → ন্যাভ ডেটটাইম (স্থানীয়):
    datetime.fromtimestamp(t, None)
    (কিছু পরিস্থিতিতে ব্যর্থ হতে পারে, নীচে জেফএস থেকে মন্তব্য দেখুন)
  • স্ট্রাক্টটাইম (ইউটিসি) → ন্যাভ ডেটটাইম (স্থানীয়, গুলি ):
    datetime.datetime(struct_time[:6], tzinfo=UTC).astimezone(tz).replace(tzinfo=None)
    (লিপ সেকেন্ড উপস্থাপন করতে পারে না, জেএফএস থেকে মন্তব্য দেখুন)
  • ন্যাভ ডেটটাইম (ইউটিসি) → নাভের ডেটটাইম (স্থানীয়):
    dt.replace(tzinfo=UTC).astimezone(tz).replace(tzinfo=None)
  • সচেতন তারিখের সময় → ন্যাভ ডেটটাইম (স্থানীয়):
    dt.astimezone(tz).replace(tzinfo=None)
  • পজিক্স → ন্যাভ ডেটটাইম (ইউটিসি):
    datetime.utcfromtimestamp(t)
  • স্ট্রাক্টটাইম (ইউটিসি) → ন্যাভ ডেটটাইম (ইউটিসি, গুলি ):
    datetime.datetime(*struct_time[:6])
    (লিপ সেকেন্ড উপস্থাপন করতে পারে না, জেএফএস থেকে মন্তব্য দেখুন)
  • ন্যাভ ডেটটাইম (স্থানীয়) → ন্যাভ ডেটটাইম (ইউটিসি):
    stz.localize(dt, is_dst=None).astimezone(UTC).replace(tzinfo=None)
    ন্যাভ ডেটটাইম (ডিএসটি রূপান্তরের সময় ব্যতিক্রম, জেএফএস থেকে মন্তব্য দেখুন)
  • সচেতন তারিখের সময় → ন্যাভ ডেটটাইম (ইউটিসি):
    dt.astimezone(UTC).replace(tzinfo=None)
  • পজিক্স → সচেতনতার তারিখ সময়:
    datetime.fromtimestamp(t, tz)
    সচেতনতার তারিখ সময় (নাইট-পাইটজ টাইমজোনগুলির জন্য ব্যর্থ হতে পারে)
  • struct_time (ইউটিসি) → খবর রাখেন DATETIME (গুলি) :
    datetime.datetime(struct_time[:6], tzinfo=UTC).astimezone(tz)
    (লিপ সেকন্ড প্রতিনিধিত্ব করতে পারে না, JFS থেকে মন্তব্য দেখুন)
  • ন্যাভ ডেটটাইম (স্থানীয়) ware সচেতনতার তারিখ সময়:
    stz.localize(dt, is_dst=None)
    ware সচেতনতার তারিখ সময় (ডিএসটি স্থানান্তরের সময় ব্যতিক্রম, জেএফএস থেকে মন্তব্য দেখুন)
  • ন্যাভ ডেটটাইম (ইউটিসি) → সচেতনতার তারিখ সময়:
    dt.replace(tzinfo=UTC)

সূত্র: তাবিবার্নস.সি.এ.


1
(1) fromtimestamp(t, None)স্থানীয় সময় অঞ্চলটি যদি বিভিন্ন ইউটিসি অফসেটে থাকে t এবং প্রদত্ত প্ল্যাটফর্মের সি লাইব্রেরিতে টিজেড ডাটাবেসে অ্যাক্সেস না থাকে তবে ব্যর্থ হতে পারে । আপনি tzlocal.get_localzone()পোর্টেবল উপায়ে tzdata সরবরাহ করতে ব্যবহার করতে পারেন । (২) fromtimestamp(t, tz)পাইটজ নন-টাইমজোনগুলির জন্য ব্যর্থ হতে পারে। (3) datetime(*struct_time[:6])আপনি অনুপস্থিত *। (4) timegm(), utctimetuple(), struct_timeভিত্তিক সমাধান ড্রপ এক সেকেন্ডের ভগ্নাংশ। পরিবর্তে আপনি একটি সুস্পষ্ট সূত্র ব্যবহার করতে পারেন ts = (d - epoch) / unit
jfs

1
(৫) stz.localize(dt, is_dst=None)অস্পষ্ট বা অস্তিত্বহীন স্থানীয় সময়গুলির জন্য যেমন একটি ব্যতিক্রম উত্থাপন করে যেমন ডিএসটি রূপান্তরকালে। ব্যতিক্রম এড়ানোর জন্য, এমন ব্যবহার করুন stz.normalize(stz.localize(dt))যা ফলস্বরূপ ফলাফল দিতে পারে। ()) ডেটটাইম () কোনও লিপ সেকেন্ড উপস্থাপন করতে পারে না। "যুগের পর থেকে কয়েক সেকেন্ড" রূপান্তর করুন struct_timeপ্রথমে একটি কর্মচঞ্চল হিসাবে। ()) "ডান" টাইমজোন ব্যবহৃত হলে নন-পসিক্স ইনপুট আশা করতে পারে time.gmtime(t)unlike calendar.timegm()পরিবর্তে ইনপুটটি POSIX হলে সুস্পষ্ট সূত্রটি ব্যবহার করুন:gmtime = lambda t: datetime(1970,1,1, tzinfo=utc) + timedelta(seconds=t)
jfs

আমি আশা করি এটি একটি টেবিলের মধ্যে পড়তে সহজ ছিল (এটি লিঙ্কটিতে রয়েছে)
মাইকেলচিরিকো

1
@ মিশেলচিরিকো, এই উত্তরে বলা হয়েছে যে "আমরা <table>ট্যাগগুলিকে অনুমতি দেই না (এবং তা করব না) দুঃখিত। এটি ইচ্ছাকৃত এবং ডিজাইনের মাধ্যমে you আপনার যদি দ্রুত এবং নোংরা" টেবিল "দরকার হয় তবে ব্যবহার করুন <pre>এবং ASCII লেআউট দরকার। আমি বিশ্বাস করি না যে কোনও ASCII টেবিল উপরের তালিকার চেয়ে আরও পঠনযোগ্য হবে।
আকাইহোলা

ভাল যে দুর্ভাগ্য। আপনার যাইহোক আমার upvote আছে ... সম্ভবত আপনার উত্তরের লিঙ্কে টেবিল রেফারেন্স?
মাইকেলচিরিকো

25
def local_to_utc(t):
    secs = time.mktime(t)
    return time.gmtime(secs)

def utc_to_local(t):
    secs = calendar.timegm(t)
    return time.localtime(secs)

সূত্র: http://feihonghsu.blogspot.com/2008/02/converting-from-local-time-to-utc.html

বিডি 808 থেকে ব্যবহারের উদাহরণ : আপনার উত্স যদি কোনও datetime.datetimeঅবজেক্ট হয় তবে tকল করুন:

local_to_utc(t.timetuple())

5
যদি আপনার উত্স কোনও ডেটটাইম.ডেটটাইম অবজেক্ট হয় তবে tকল করুন: লোকাল_তো_ট্যাক (t.Timetuple ())
বিডি 808

2
.timetuple()সেট কল tm_isdstকরতে -1; mktime()ডিএসটি রূপান্তরকালে 50% সুযোগ ব্যর্থ হয়।
jfs

1
চকের সমাধানটি মিলিসেকেন্ডের তথ্য হারায়।
লুকা

21

ডেটুটিল (যা অন্যান্য সম্পর্কিত প্রশ্নের জন্য এসও-তে ব্যাপকভাবে সুপারিশ করা হয়) নিয়ে আমার ভাগ্য ভাল :

from datetime import *
from dateutil import *
from dateutil.tz import *

# METHOD 1: Hardcode zones:
utc_zone = tz.gettz('UTC')
local_zone = tz.gettz('America/Chicago')
# METHOD 2: Auto-detect zones:
utc_zone = tz.tzutc()
local_zone = tz.tzlocal()

# Convert time string to datetime
local_time = datetime.strptime("2008-09-17 14:02:00", '%Y-%m-%d %H:%M:%S')

# Tell the datetime object that it's in local time zone since 
# datetime objects are 'naive' by default
local_time = local_time.replace(tzinfo=local_zone)
# Convert time to UTC
utc_time = local_time.astimezone(utc_zone)
# Generate UTC time string
utc_string = utc_time.strftime('%Y-%m-%d %H:%M:%S')

(কোডটি ইউটিসির ডেটটাইম স্ট্রিংকে স্থানীয় তারিখের সময় রূপান্তর করার উত্তর থেকে প্রাপ্ত হয়েছিল )


dateutilঅতীত তারিখগুলির জন্য ব্যর্থ হতে পারে যদি স্থানীয় টাইমজোন এমন সিস্টেমগুলিতে তখন আলাদা আলাদা ইউটিসি অফসেট (ডিএসটি ট্রানজিশনের সাথে সম্পর্কিত না) যেখানে বাস্তবায়ন কোনও historicalতিহাসিক টাইমজোন ডাটাবেস (বিশেষত উইন্ডোজ) ব্যবহার করে না। pytz+ + tzlocalপরিবর্তে ব্যবহার করা যেতে পারে।
jfs

@ জেএফেসেবাস্টিয়ান- এর কথা শুনিনি- আমরা আরও তথ্য কোথায় পাব?
ইয়ারিন

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

আউটপুট কি? আউটপুট পোস্ট করুন।
not2qubit

18

পাইটজের সাথে আরও একটি উদাহরণ, তবে এতে স্থানীয়করণ () অন্তর্ভুক্ত রয়েছে, যা আমার দিনটি বাঁচিয়েছিল।

import pytz, datetime
utc = pytz.utc
fmt = '%Y-%m-%d %H:%M:%S'
amsterdam = pytz.timezone('Europe/Amsterdam')

dt = datetime.datetime.strptime("2012-04-06 10:00:00", fmt)
am_dt = amsterdam.localize(dt)
print am_dt.astimezone(utc).strftime(fmt)
'2012-04-06 08:00:00'


7
import time

import datetime

def Local2UTC(LocalTime):

    EpochSecond = time.mktime(LocalTime.timetuple())
    utcTime = datetime.datetime.utcfromtimestamp(EpochSecond)

    return utcTime

>>> LocalTime = datetime.datetime.now()

>>> UTCTime = Local2UTC(LocalTime)

>>> LocalTime.ctime()

'Thu Feb  3 22:33:46 2011'

>>> UTCTime.ctime()

'Fri Feb  4 05:33:46 2011'

mktime(dt.timetuple())ডিএসটি রূপান্তরকালে ব্যর্থ হতে পারে । নেই LocalTimezoneডক্স (এটা অতি সাম্প্রতিক সময় অঞ্চল সংজ্ঞা জন্য কাজ করে কিন্তু (ডিএসটি অতীতে তারিখগুলি জন্য ব্যর্থ হতে পারে সম্পর্কহীন)) মধ্যে
JFS

5

আপনি যদি ডেটটাইম.ডেটটাইম পছন্দ করেন:

dt = datetime.strptime("2008-09-17 14:04:00","%Y-%m-%d %H:%M:%S")
utc_struct_time = time.gmtime(time.mktime(dt.timetuple()))
utc_dt = datetime.fromtimestamp(time.mktime(utc_struct_time))
print dt.strftime("%Y-%m-%d %H:%M:%S")

1
অবশ্যই, তবে কেন আপনি এটি পছন্দ করেন তা আমি দেখতে পাচ্ছি না। এটির জন্য আমার সংস্করণটির চেয়ে অতিরিক্ত আমদানি এবং আরও 3 ফাংশন কল প্রয়োজন ...
টম

% Z এবং% z এখনও সাদা জায়গাগুলি মুদ্রণ করে।
পাভেল ভ্লাসভ

2
এটা ভুল। স্থানীয় সময় অঞ্চলটি ইউটিসি না হলে এটি ব্যর্থ হয়। mktime()ইনপুট হিসাবে স্থানীয় সময় আশা করে। fromtimestamp()স্থানীয় সময় না, utc না। যদি আপনি এটি ঠিক করেন তবে এই অতিরিক্ত সমস্যাগুলি দেখুন (যেমন dateutil, stdlib- কেবল সমাধান ব্যর্থ হতে পারে)
jfs

5

সহজ

আমি এটি এর মতো করেছিলাম:

>>> utc_delta = datetime.utcnow()-datetime.now()
>>> utc_time = datetime(2008, 9, 17, 14, 2, 0) + utc_delta
>>> print(utc_time)
2008-09-17 19:01:59.999996

অভিনব বাস্তবায়ন

যদি আপনি অভিনবতা পেতে চান তবে আপনি এটিকে ফান্টারে পরিণত করতে পারেন:

class to_utc():
    utc_delta = datetime.utcnow() - datetime.now()

    def __call__(cls, t):
        return t + cls.utc_delta

ফলাফল:

>>> utc_converter = to_utc()
>>> print(utc_converter(datetime(2008, 9, 17, 14, 2, 0)))
2008-09-17 19:01:59.999996

5
এটি দিবালোক সঞ্চয় সময়ের জন্য কাজ করে না - যেমন যদি বর্তমানে গ্রীষ্ম হয় এবং আপনি যে তারিখটি রূপান্তর করছেন তারিখটি শীতকালে হয়। এবং প্রশ্নটি স্ট্রিং হিসাবে সংরক্ষিত তারিখগুলিকে রূপান্তর করার বিষয়ে ছিল ...
টম

1
অবগতির জন্য। এই পদ্ধতির সবচেয়ে বড় সমস্যা (দিবালোকের সঞ্চয় ছাড়াও) ডেল্টাটি বন্ধ হবে কয়েক মিলি সেকেন্ড। আমার সমস্ত ক্যালেন্ডার আমন্ত্রণগুলি 1 মিনিটের মধ্যে দেখানো হচ্ছে।
নস্টালজি.ইও


3

কেমন -

time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(seconds))

যদি সেকেন্ড হয় Noneতবে এটি স্থানীয় সময়টিকে ইউটিসি সময়ের সাথে রূপান্তর করে অন্য সময়টি উত্তীর্ণ হয়ে ইউটিসিতে রূপান্তর করে।


2

প্রায় দিনের আলো-সংরক্ষণ ইত্যাদি পাওয়ার জন্য

উপরের উত্তরগুলির মধ্যে বিশেষত আমাকে বিশেষভাবে সহায়তা করেনি। নীচের কোডটি GMT এর জন্য কাজ করে।

def get_utc_from_local(date_time, local_tz=None):
    assert date_time.__class__.__name__ == 'datetime'
    if local_tz is None:
        local_tz = pytz.timezone(settings.TIME_ZONE) # Django eg, "Europe/London"
    local_time = local_tz.normalize(local_tz.localize(date_time))
    return local_time.astimezone(pytz.utc)

import pytz
from datetime import datetime

summer_11_am = datetime(2011, 7, 1, 11)
get_utc_from_local(summer_11_am)
>>>datetime.datetime(2011, 7, 1, 10, 0, tzinfo=<UTC>)

winter_11_am = datetime(2011, 11, 11, 11)
get_utc_from_local(winter_11_am)
>>>datetime.datetime(2011, 11, 11, 11, 0, tzinfo=<UTC>)

2

Http://crsmithdev.com/arrow/ ব্যবহার করা হচ্ছে

arrowObj = arrow.Arrow.strptime('2017-02-20 10:00:00', '%Y-%m-%d %H:%M:%S' , 'US/Eastern')

arrowObj.to('UTC') or arrowObj.to('local') 

এই গ্রন্থাগারটি জীবনকে সহজ করে তোলে :)


তীর দুর্দান্ত: arrow.get (datetime.now (), 'স্থানীয়') থেকে ( 'UTC')
SteveJ

1

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

import time
import calendar

local_time = time.strptime("2018-12-13T09:32:00.000", "%Y-%m-%dT%H:%M:%S.%f")
local_seconds = time.mktime(local_time)
utc_time = time.gmtime(local_seconds)

অনুসন্ধানের কীওয়ার্ডের উপর নির্ভর করে লিঙ্কযুক্ত প্রশ্নের পরিবর্তে এই প্রশ্নটি গুগলে পপ আপ হওয়ায় আমি এখানে উত্তরটি পোস্ট করছি।


1

আমার একটি প্রকল্পে আমার এই কোডটি রয়েছে:

from datetime import datetime
## datetime.timezone works in newer versions of python
try:
    from datetime import timezone
    utc_tz = timezone.utc
except:
    import pytz
    utc_tz = pytz.utc

def _to_utc_date_string(ts):
    # type (Union[date,datetime]]) -> str
    """coerce datetimes to UTC (assume localtime if nothing is given)"""
    if (isinstance(ts, datetime)):
        try:
            ## in python 3.6 and higher, ts.astimezone() will assume a
            ## naive timestamp is localtime (and so do we)
            ts = ts.astimezone(utc_tz)
        except:
            ## in python 2.7 and 3.5, ts.astimezone() will fail on
            ## naive timestamps, but we'd like to assume they are
            ## localtime
            import tzlocal
            ts = tzlocal.get_localzone().localize(ts).astimezone(utc_tz)
    return ts.strftime("%Y%m%dT%H%M%SZ")

0

পাইথন 3 এ:

pip install python-dateutil

from dateutil.parser import tz

mydt.astimezone(tz.gettz('UTC')).replace(tzinfo=None) 

এটি কাজ করে বলে মনে হচ্ছে না, এটি একটি ভ্যালু এরির ব্যতিক্রম উত্থাপন করে: ভ্যালু এরির: অ্যাসটাইমজোন () একটি নিষ্পাপ ডেটটাইমটিতে প্রয়োগ করা যায় না
স্ট্রমনসন

এটি হওয়া উচিত: from dateutil import tz
জাভিয়ের

-3

কেমন -

time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(seconds))

যদি সেকেন্ড হয় Noneতবে এটি স্থানীয় সময়টিকে ইউটিসি সময়ের সাথে রূপান্তর করে অন্য সময়টি উত্তীর্ণ হয়ে ইউটিসিতে রূপান্তর করে।


1
এটি সাহায্য করে না, প্রশ্নটি একটি প্রদত্ত স্থানীয় সময়ের স্ট্রিংটিকে একটি ইউটিসি স্ট্রিংয়ে রূপান্তর করা হয়েছিল।
টম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.