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


119

আমি একটি সি # ডেটটাইম ভেরিয়েবলটি ইউনিক্স সময়কে রূপান্তরিত করার চেষ্টা করছি, অর্থাৎ, 1 ই জানুয়ারী, 1970 এর পরে সেকেন্ডের সংখ্যা It মনে হচ্ছে যে ডেটটাইম আসলে 1 লা জানুয়ারি, 0001 সাল থেকে 'টিক্স' সংখ্যা হিসাবে বাস্তবায়িত হয়েছে।

আমার বর্তমান চিন্তাভাবনাটি আমার ডেটটাইম থেকে 1 জানুয়ারি, 1970 কে এইভাবে বিয়োগ করতে হবে:

TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0));
return span.TotalSeconds;

একটি ভাল উপায় আছে কি?


উত্তর:


195

মূলত এটি। ইউনিক্স যুগের সময় থেকে রূপান্তর করতে আমি এই পদ্ধতিগুলি ব্যবহার করি:

public static DateTime ConvertFromUnixTimestamp(double timestamp)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    return origin.AddSeconds(timestamp);
}

public static double ConvertToUnixTimestamp(DateTime date)
{
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    TimeSpan diff = date.ToUniversalTime() - origin;
    return Math.Floor(diff.TotalSeconds);
}

আপডেট: নেট কোর ২.১ এবং। নেট স্ট্যান্ডার্ড ২.১ হিসাবে ইউনিক্সের সমান একটি ডেটটাইম স্ট্যাটিক থেকে পাওয়া যাবে DateTime.UnixEpoch


1
এটি লক্ষণীয় যে আপনি যদি আরও সঠিক টাইমস্ট্যাম্প বা জাভাস্ক্রিপ্টের তারিখ () অবজেক্টের সামঞ্জস্যের জন্য মিলসেকেন্ডগুলিতে রূপান্তর করতে চান তবে টাইমস্ট্যাম্প টাইপের জন্য আপনাকে int এর পরিবর্তে দীর্ঘ ব্যবহার করতে হবে।
সোভিয়েট

3
আমার পক্ষে কাজ করেনি। এই উত্তর কৌতুক করেনি stackoverflow.com/questions/249760/...
Zeezer

@ জনি - টু ইউনিভার্সালটাইম () ইউটিসিতে রূপান্তর করে, তাই এটি ইউটিসির অ্যাকাউন্ট হয়।
ডেভ সোয়ারস্কি

4
ডেটটাইম উত্স = নতুন তারিখটাইম (1970, 1, 1, 0, 0, 0, 0, তারিখটাইমকাইন্ড.ইউটিসি); আকর্ষণীয় যে কেউ এই পরামর্শ দেয় না। খুব ঘন ঘন আপনার কাছে ইউটিসি সময় উপস্থাপনের জন্য মিলিসেকেন্ড থাকবে। এবং যদি t specify this explicitly and somewhere later in code youআপনার কাছে খারাপ ইউটিসি সময় শেষ হওয়ার চেয়ে টু ইউনিভার্সালটাইম () থাকে না, কারণ ডিফল্টভাবে ডেটটাইম ইউটিসি নয়।
স্টিভি

52

যদি আপনার বাকি সিস্টেমটি ডেটটাইমের পরিবর্তে ডেটটাইমঅফসেটের সাথে ঠিক থাকে তবে সত্যিই একটি সুবিধাজনক বৈশিষ্ট্য রয়েছে:

long unixSeconds = DateTimeOffset.Now.ToUnixTimeSeconds();

7
এই ক্লিনার উপায়, কিন্তু এটা ফ্রেমওয়ার্ক 4.6 একমাত্র উপলব্ধ msdn.microsoft.com/en-us/library/...
অস্কার Fraxedas

1
খুশী হলাম। এবং অবশ্যই ইউনিক্স থেকে ডেটটাইম অফসে যাওয়ার জন্য, আপনি var time = DateTimeOffset.FromUnixTimeSeconds(5000); এমএস ডক
জর্দান

22

কেবলমাত্র আমি দেখতে পাচ্ছি এটি হ'ল ১৯ 1970০ সালের ১ জানুয়ারি ইউটিসি-র মধ্যরাত্রির পর থেকে

TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc));
return span.TotalSeconds;

7
এটি কি ডেটটাইম হওয়া উচিত? এখনই?
oferei

14

টাইমজোন সমস্যাটি এড়াতে আপনি সম্ভবত ডেটটাইম.অটাক এখন ব্যবহার করতে চান

TimeSpan span= DateTime.UtcNow.Subtract(new DateTime(1970,1,1,0,0,0)); 

টাইমজোন সমস্যাগুলি এড়ানোর একমাত্র উপায় হ'ল 1) সুখীভাবে অজ্ঞ থাকুন এবং কেবলমাত্র একটি সময় অঞ্চল সমর্থন করুন, বা 2) টাইমজোনগুলি হ্যান্ডেল করুন (কমপক্ষে) আপনি যেখানেই অন্য সিস্টেম বা শেষ ব্যবহারকারীর সাথে ইন্টারফেস করেন। বিশেষত, অভ্যন্তরীণভাবে সর্বত্র ইউটিসি ব্যবহার করা যুদ্ধের একমাত্র অংশ। প্রথম দৃশ্যে, ইউটিসির ডেটটাইম যুক্ত করা আসলে সমস্যাটিকে আরও খারাপ করে দেয়, যতক্ষণ না আপনি (2) এর সবগুলি করতে প্রস্তুত হন, কারণ আপনি কেবলমাত্র ইউটিসিকে সমর্থন করার জন্য যে কোনও একটি টাইমজোনকে সমর্থন করছেন না।
jpaugh

1

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


0

আপনি ডেটটাইমের একটি স্টার্টটাইম এবং এন্ডটাইম তৈরি করতে পারেন, তারপরে এন্ডটাইম.সুব্র্যাক্ট (স্টার্টটাইম) করতে পারেন। তারপরে আপনার স্প্যান.সেকেন্ডগুলি আউটপুট করুন।

আমি মনে করি এটি কাজ করা উচিত।


0

আমি আমার ক্যালকুলাসে এপোক টাইমের পরিবর্তে বছর 2000 ব্যবহার করি। ছোট সংখ্যার সাথে কাজ করা সঞ্চয় এবং পরিবহন করা সহজ এবং জেএসএন বান্ধব।

বছর 2000 দ্বিতীয় যুগের দ্বিতীয় সময় ছিল 946684800।

বছর 2000 জানুয়ারীর 1-স্ট্যান্ড থেকে 63082281600 দ্বিতীয় ছিল।

ডেটটাইম.ইউটিসি নোট টিকগুলি জানুয়ারী 0001 এর 1-স্ট্যান্ড থেকে শুরু হয়

2000 সাল থেকে দ্বিতীয় :

DateTime.UtcNow.Ticks/10000000-63082281600

ইউনিক্স সময় থেকে সেকেন্ডস:

DateTime.UtcNow.Ticks/10000000-946684800

উদাহরণস্বরূপ 2020 বছরটি হ'ল:

var Year2020 = (নতুন ডেটটাইম ())। অ্যাডস অ্যাডস (2019) .টিক্স; // কারণ ডেটটাইম ইতিমধ্যে বছর 1 এ শুরু হয়

637134336000000000 জানুয়ারী 0001-এর 1-এর পরে থেকে টিক্স

63113433600 সেকেন্ডস 1 জানুয়ারীর 0001 থেকে সেকেন্ড

যুগের সময় থেকে 1577836800 সেকেন্ড

200011 সাল থেকে 631152000 সেকেন্ড

তথ্যসূত্র:

যুগের সময় রূপান্তরকারী: https://www.epochconverter.com

বছর 1 রূপান্তরকারী: https://www.epochconverter.com/second-days-since-y0

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