ইউনিক্স টাইমস্ট্যাম্প স্ট্রিংটিকে পঠনযোগ্য তারিখে রূপান্তর করা


825

পাইথনে আমার একটি ইউনিক্স টাইমস্ট্যাম্প (অর্থাত "1284101485") উপস্থাপন করার একটি স্ট্রিং রয়েছে এবং আমি এটি একটি পঠনযোগ্য তারিখে রূপান্তর করতে চাই। আমি যখন ব্যবহার করি time.strftime, তখন আমি একটি পাই TypeError:

>>>import time
>>>print time.strftime("%B %d %Y", "1284101485")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument must be 9-item sequence, not str

1
পিছনে রূপান্তর করার জন্য প্রশ্নের লিঙ্কটিও
slushy

উত্তর:


1209

datetimeমডিউল ব্যবহার করুন :

from datetime import datetime
ts = int("1284101485")

# if you encounter a "year is out of range" error the timestamp
# may be in milliseconds, try `ts /= 1000` in that case
print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))

131
.fromtimestamp()কোনও স্থানীয় সময় অঞ্চলে আলাদা ইউটিসি অফসেট থাকলে বিগত তারিখগুলির জন্য ব্যর্থ হতে পারে। আপনার একটি historicতিহাসিক সময় অঞ্চল ডাটাবেস যেমন pytzমডিউল দ্বারা সরবরাহ করা (বা আপনার ওএস) প্রয়োজন need অথবা কেবল ইউটিসি-তে কাজ করুন এবং ব্যবহার করুন .utcfromtimestamp()
jfs

9
@ জেফাসেবাস্টিয়ান আপনি উল্লেখ করেছেন যে এটি বেশ কয়েকটি মন্তব্যে ব্যর্থ হতে পারে - দয়া করে আপনি কেন এটি বিগত তারিখগুলি / সময় ব্যর্থ হবে তা ব্যাখ্যা করতে পারেন? (উপবিষ্টদের দ্বারা বিচার করে, অনেক লোক উভয়ই আপনার সাথে একমত হয় এবং এটিকে সোজা হিসাবে দেখেন) অবশ্যই কোনও ইউনিক্স টাইমস্ট্যাম্পের একটি সহজ সমমানের তারিখ / সময় আছে?
ডেভিডহুড 2

3
@ ডেভিডহুড 2 এমন একটি ব্যবস্থা গ্রহণ করুন যেখানে অজগরটির টিজে ডাটাবেস (উইন্ডোজ) -এর অ্যাক্সেস নেই , আপনার স্থানীয় সময় অঞ্চলকে এমন একটি টাইমজোন সেট করুন যা অতীতে বিভিন্ন ইউটিসি অফসেট ছিল (যেমন ইউরোপ / মস্কো), অতীতের টাইমস্ট্যাম্প সহ ফাইরটাইমস্ট্যাম্প () কল করুন (2011-)। ব্যবহার করে গণনা করা মানগুলির সাথে ফলাফলের তুলনা করুন pytz। যদি এটি অস্পষ্ট হয়; একটি পৃথক স্ট্যাক ওভারফ্লো প্রশ্ন জিজ্ঞাসা করুন।
jfs

3
@ ডেভিডহুড 2: আমি আমার নিজের উত্তরpytz পোস্ট করেছি যা সমাধানটি দেখায়
jfs

6
একটি ইম্পোর্ট পয়েন্ট হ'ল এটি যুগের পর থেকে কয়েক সেকেন্ডের মধ্যে সময়সীমা গ্রহণ করে; আপনার যদি মিলি সেকেন্ড থাকে তবে আমি 1000 টি দ্বারা ভাগ করতে হবে যেমন আমি সন্ধান পেয়েছি।
શબ્દরাশি


145

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

datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')

যেখানে পিক্স_টাইম হ'ল পজিক্স যুগের সময় আপনি রূপান্তর করতে চান


2
তারিখের সময় আমদানি করুন, পাইটজ ডেটটাইম.ডেটটাইম (1990, 1, 1, tzinfo = pytz.utc)
y.selivonchyk

76
>>> import time
>>> time.ctime(int("1284101485"))
'Fri Sep 10 16:51:25 2010'
>>> time.strftime("%D %H:%M", time.localtime(int("1284101485")))
'09/10/10 16:51'

10
time.ctime()এবং time.localtime()স্থানীয় তারিখের জন্য আলাদা ইউটিসি অফসেট থাকলে বিগত তারিখগুলির জন্য ব্যর্থ হতে পারে। আপনার একটি historicতিহাসিক সময় অঞ্চল ডাটাবেস যেমন pytzমডিউল দ্বারা সরবরাহ করা (বা আপনার ওএস) প্রয়োজন need অথবা কেবল ইউটিসি-তে কাজ করুন এবং ব্যবহার করুন time.gmtime()datetimeবৃহত্তর তারিখের পরিসীমা সরবরাহ datetime.utcfromtimestamp()করতে পারে সুতরাং timeফাংশনগুলির পরিবর্তে এটি ব্যবহার করা যেতে পারে ।
jfs

66

দুটি অংশ রয়েছে:

  1. ইউনিক্স টাইমস্ট্যাম্প ("যুগের আগে" সেকেন্ড ") স্থানীয় সময় রূপান্তর করুন
  2. স্থানীয় সময় কাঙ্ক্ষিত বিন্যাসে প্রদর্শন করুন।

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

#!/usr/bin/env python
from datetime import datetime
import tzlocal  # $ pip install tzlocal

unix_timestamp = float("1284101485")
local_timezone = tzlocal.get_localzone() # get pytz timezone
local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)

এটি প্রদর্শনের জন্য, আপনি যে কোনও সময় ফর্ম্যাট ব্যবহার করতে পারেন যা আপনার সিস্টেমের দ্বারা সমর্থিত যেমন:

print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
print(local_time.strftime("%B %d %Y"))  # print date in your format

পরিবর্তে একটি পঠনযোগ্য ইউটিসি সময় পাওয়ার জন্য যদি আপনার স্থানীয় সময় প্রয়োজন না হয়:

utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))

আপনি যদি টাইমজোন সমস্যাগুলির বিষয়ে চিন্তা না করেন যা কোন তারিখটি ফিরে আসবে বা যদি অজগরটিকে আপনার সিস্টেমে টিজেড ডাটাবেসে অ্যাক্সেস করতে পারে তবে:

local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))

পাইথন 3-এ, আপনি কেবল স্টিডলিব ব্যবহার করে টাইমজোন-সচেতন ডেটটাইম পেতে পারেন (ইউটিসি অফসেটটি ভুল হতে পারে যদি আপনার সিস্টেমে পাইথনের টিজেড ডাটাবেসে অ্যাক্সেস না থাকে যেমন উইন্ডোজে):

#!/usr/bin/env python3
from datetime import datetime, timezone

utc_time = datetime.fromtimestamp(unix_timestamp, timezone.utc)
local_time = utc_time.astimezone()
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))

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

#!/usr/bin/env python
import time

unix_timestamp  = int("1284101485")
utc_time = time.gmtime(unix_timestamp)
local_time = time.localtime(unix_timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time)) 
print(time.strftime("%Y-%m-%d %H:%M:%S+00:00 (UTC)", utc_time))  

আপনি যদি স্থানীয় সময় সম্পর্কে চিন্তা করেন তবে এটি সর্বাধিক ভোট দেওয়া উত্তর হওয়া উচিত।
আজমসা

36

ইউনিক্স টাইমস্ট্যাম্পের মানব পাঠযোগ্য টাইমস্ট্যাম্পের জন্য, আমি এটি আগে স্ক্রিপ্টগুলিতে ব্যবহার করেছি:

import os, datetime

datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")

আউটপুট:

'২ 26 শে ডিসেম্বর, ২০১২'


25

আপনি বর্তমান সময়কে এভাবে রূপান্তর করতে পারেন

t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'

স্ট্রিংয়ে একটি তারিখকে বিভিন্ন ফর্ম্যাটে রূপান্তর করতে।

import datetime,time

def createDateObject(str_date,strFormat="%Y-%m-%d"):    
    timeStamp = time.mktime(time.strptime(str_date,strFormat))
    return datetime.datetime.fromtimestamp(timeStamp)

def FormatDate(objectDate,strFormat="%Y-%m-%d"):
    return objectDate.strftime(strFormat)

Usage
=====
o=createDateObject('2013-03-03')
print FormatDate(o,'%d-%m-%Y')

Output 03-03-2013

24

ব্যবহার ছাড়াও সময় / DATETIME প্যাকেজ, পান্ডাস এছাড়াও সমাধানের জন্য একই problem.Here কীভাবে আমরা ব্যবহার করতে পারেন ব্যবহার করা যেতে পারে পান্ডাস রূপান্তর করতে টাইমস্ট্যাম্প করতে পাঠযোগ্য তারিখ :

টাইমস্ট্যাম্প দুটি ফর্ম্যাটে থাকতে পারে:

  1. ১৩ ডিজিট (মিলিসেকেন্ড) - আজ থেকে মিলিসেকেন্ডগুলিতে রূপান্তর করতে, ব্যবহার করুন:

    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    
    Output: '2017-04-30 05:31:01'
  2. 10 ডিজিট (সেকেন্ড) - সেকেন্ডে তারিখে রূপান্তর করতে, ব্যবহার করুন:

    import pandas
    result_s=pandas.to_datetime('1493530261',unit='s')
    str(result_s)
    
    Output: '2017-04-30 05:31:01'

পান্ডাদের আর একটি জয় বলে মনে হচ্ছে - মডিউলটি সব
কিছুতেই দুর্দান্ত

21
timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')

সময়ের সাথে টাইমস্ট্যাম্প থেকে পঠনযোগ্য তারিখ পান, এছাড়াও আপনি তারিখের ফর্ম্যাটটি পরিবর্তন করতে পারেন।


5
এই উত্তর জোড়ে এই উত্তর দিয়েছিলেন?
কোকিকা

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

20

পাইথন ৩.6++ এ:

import datetime

timestamp = 1579117901
value = datetime.datetime.fromtimestamp(timestamp)
print(f"{value:%Y-%m-%d %H:%M:%S}")

আউটপুট:

2020-01-15 19:51:41

ব্যাখ্যা:


6
import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp

6

জিএমটাইম এবং ফর্ম্যাট ফাংশন ব্যবহার করে এটি করা যেতে পারে এমন অন্য উপায়;

from time import gmtime
print('{}-{}-{} {}:{}:{}'.format(*gmtime(1538654264.703337)))

আউটপুট: 2018-10-4 11:57:44


1

আমি সবেমাত্র সফলভাবে ব্যবহার করেছি:

>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date

0

দ্রুত এবং নোংরা একটি লাইনার:

'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))

'2013-5-5-1-9-43'


3
অথবা আরো সংক্ষেপে নিম্নোক্তভাবে। '-' যোগদানের (। মানচিত্র (STR, datetime.datetime.now () timetuple () [: 6]))
Jelle Zijlstra

2
@ জেলজিজলস্ট্র এহ, আমি মানচিত্রে জেনারেটর এক্সপ্রেশনটিকে অনেক বেশি পছন্দ করি।
crhodes

4
'2013-5-5-1-9-43' কোন ধরণের তারিখের ফর্ম্যাট? তারিখ / সময়ের বৈধ উপস্থাপনা হিসাবে আমি এই ফর্ম্যাটটি আর কোথাও দেখিনি।
ম্যাডোকি

এটিকে কীভাবে ইমডোকি অবৈধ উপস্থাপনা হিসাবে যোগ্য করে তুলে ধরতে পারেন? আপনার মানে কি অমানুষ? অন্যান্য অন্যান্য উত্তরের তুলনায় এটির প্রাথমিক সুবিধাটি হ'ল এটি কোনও ফাইল বা ডিরেক্টরি পাথের মধ্যে অন্তর্ভুক্ত করার ক্ষমতা, কারণ স্থানগুলি এবং কলোনগুলি স্ট্যান্ডার্ড ইউনিক্স ডিরেক্টরি অক্ষরের সেটগুলিতে নেই। দেখতে যেমন stackoverflow.com/a/458001/209246
eqzx

0

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

import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")

5
প্রতিটি প্রোগ্রামিং এর নিজস্ব তারিখ এবং সময় রূপান্তরকারী থাকে। এর জন্য কখনই মোড / ফ্রেমওয়ার্ক ব্যবহার করা উচিত নয়
জোসফ্যাব্রে

strptimeএবং strftimeস্বজ্ঞাত নয় ... এবং পাঠযোগ্যও নয় ... তবে আমি আপনার মতামতটি বুঝতে এবং সম্মান করছি
রাফেল অ্যামোয়েডো

4
এটি "ব্যবহার করতে হবে না" ভুল হওয়া উচিত। এটি ভাষা এবং অন্তর্নির্মিত libs মানের উপর নির্ভর করে। জাভাস্ক্রিপ্টের মুহুর্তগুলি রয়েছে এবং জাভাতে জোদার সময় ছিল যা উভয়ই স্ব-স্ব অন্তর্নির্মিত তারিখ এবং সময় রূপান্তর ব্যবহারের চেয়ে বেশি জনপ্রিয় (এত বেশি জোদা সময় জাভা 8 এর আপডেট হওয়া স্ট্যান্ডার্ড লিবগুলিকে প্রভাবিত করেছিল)। এটি বলেছে, যদি না প্রশ্নটি তৃতীয় পক্ষের লাইব্রেরিগুলির জন্য কল না করে, এটি স্ট্যান্ডার্ড লাইব্রেরির উপর ভিত্তি করে উত্তর দেওয়া ভাল।
হেজাজমান

আমি সংশোধিত @ নিকোসভেন্তুরাসে দাঁড়িয়ে আছি। আমি প্রথমবারের মতো "জেএস ​​ডেট ইন আইই আলাদাভাবে আচরণ করি" ইস্যুটি পেয়েছি। সুতরাং আমি moment.js ব্যবহার করে শেষ করেছি
জোসফ্যাব্রে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.