আমি কীভাবে পাইথনে একটি মিলটাইম থেকে ডেটটাইম তৈরি করব?


142

আমি জাভা.ইটিল.ডেট (মিলিসেকেন্ড) দ্বারা জাভাতে অনুরূপ ডেট অবজেক্ট তৈরি করতে পারি । আমি পাইথনে তুলনামূলক কীভাবে তৈরি করব?

একটি তারিখ অবজেক্ট বরাদ্দ করে এবং স্ট্যান্ডার্ড বেস টাইম থেকে "যুগ" হিসাবে পরিচিত 1 মিলি সেকেন্ডের নির্দিষ্ট সংখ্যার প্রতিনিধিত্ব করতে এটি সূচনা করে, যথা 1 জানুয়ারী, 1970, 00:00:00 জিএমটি।

উত্তর:


215

এটি কেবল টাইমস্ট্যাম্পে রূপান্তর করুন

datetime.datetime.fromtimestamp(ms/1000.0)

17
একটি নোট - পাইথন 3 এ, (/) ভাসমান-পয়েন্ট বিভাগ করবে। অবিচ্ছেদ্য বিভাগ সম্পাদন করতে, (//) ব্যবহার করুন।
জন মিলিকিন

3
আপনি কি আসলেই ভাসমান বিভাগ চান না? অন্যথায় আপনি 1 সেকেন্ডের নীচে কোনও নির্ভুলতা হারাচ্ছেন (টাইমস্ট্যাম্পের ভগ্নাংশের অংশে রাখা)। কোনও কাটা ছাড়াই এমএস / 1000.0 ব্যবহার করা আরও ভাল।
ব্রায়ান

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

30
ফ্লোট ব্যবহার না করে নির্ভুলতা ধরে রাখতে, আপনি এটিও করতে পারেন:datetime.utcfromtimestamp(ms//1000).replace(microsecond=ms%1000*1000)
tsg

2
এই সমাধানের সাথে আর একটি সমস্যা: "থেকে টাইমস্ট্যাম্প () ভ্যালুএরর বাড়িয়ে তুলতে পারে, যদি টাইমস্ট্যাম্পটি সি স্থানীয় সময় () বা জিএমটাইম () ফাংশন প্ল্যাটফর্ম দ্বারা সমর্থিত মানের সীমা ছাড়িয়ে যায় তবে এটি 1970 এর মধ্যে বছরগুলিতে সীমাবদ্ধ হওয়া সাধারণ common 2038. " - আপনার কোডটি কত দিন স্থায়ী হবে বলে আশা করা হচ্ছে ???
মাইকে রডেন্ট

12

এই সম্পর্কে কি? আমার ধারণা এটি 1970 সালের আগে এবং 2038 এর পরে তারিখগুলি পরিচালনা করতে গণনা করা যেতে পারে।

target_date_time_ms = 200000 # or whatever
base_datetime = datetime.datetime( 1970, 1, 1 )
delta = datetime.timedelta( 0, 0, 0, target_date_time_ms )
target_date = base_datetime + delta

পাইথন স্ট্যান্ডার্ড লাইব হিসাবে উল্লিখিত:

থেকে টাইমস্ট্যাম্প () মান মান বাড়িয়ে দিতে পারে, যদি টাইমস্ট্যাম্প প্ল্যাটফর্ম সি লোকালটাইম () বা জিএমটাইম () ফাংশন দ্বারা সমর্থিত মানের সীমা ছাড়িয়ে যায়। এটি 1970 এর মধ্যে 2038 এর মধ্যে বছরগুলিতে সীমাবদ্ধ হওয়া সাধারণ।


6
আপনি ব্যবহার করতে পারেনutc_time = datetime(1970, 1, 1) + timedelta(milliseconds=millis)
jfs

9

পান্ডা ব্যবহারের কারণে ভারী ভারী তবে কাজ করে:

import pandas as pd
pd.to_datetime(msec_from_java, unit='ms').to_pydatetime()

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