জাভা এর সমতুল্য কি System.currentTimeMillis()সি # তে ?
উত্তর:
একটি বিকল্প:
private static readonly DateTime Jan1st1970 = new DateTime
(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static long CurrentTimeMillis()
{
return (long) (DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
জাভাতে একটি সাধারণ প্রবাদ হ'ল currentTimeMillis()সময় বা সময় নির্ধারণের উদ্দেশ্যে ব্যবহার করা, যেখানে আপনি ১৯ 1970০ সাল থেকে আসল মিলিসেকেন্ডগুলিতে আগ্রহী নন, তবে পরিবর্তে কিছু আপেক্ষিক মান গণনা করুন এবং currentTimeMillis()সেই মানটির পরবর্তী অনুরোধগুলির সাথে তুলনা করুন ।
যদি আপনি এটি সন্ধান করেন তবে সি # সমতুল্য Environment.TickCount।
C# give : 2688547এবংJava give : 1390707872687
System.currentTimeMillis()১৯ 1970০ সাল থেকে ইউটিসি সময়কে এমএসে Environment.TickCountফেরত দেয় , যখন অ্যাপটি শুরু হওয়ার পর থেকে এমএস প্রদান করে। System.currentTimeMillis()অতিবাহিত সময় যাচাই করার জন্য ভাল, তবে আপনি যদি দুটি সময়কাল তুলনীয় হতে চান তবে আপনাকে অবশ্যই ব্যবহার করতে হবে System.nanoTime()।
DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
DateTimeOffsetপদ্ধতি নেট 4.6 হিসাবে চালু করা হয়।
System.currentTimeMillis()জাভা 1/1/1970 থেকে মিলিসেকেন্ডে বর্তমান সময় ফেরৎ
সি # হবে
public static double GetCurrentMilli()
{
DateTime Jan1970 = new DateTime(1970, 1, 1, 0, 0,0,DateTimeKind.Utc);
TimeSpan javaSpan = DateTime.UtcNow - Jan1970;
return javaSpan.TotalMilliseconds;
}
সম্পাদনা করুন: প্রস্তাবিত হিসাবে এটি utc তৈরি :)
আমরা কিছুটা অভিনবতা পেতে পারি এবং এটি একটি এক্সটেনশন পদ্ধতি হিসাবে করতে পারি, যাতে এটি ডেটটাইম ক্লাসটি বন্ধ করে দেয়:
public static class DateTimeExtensions
{
private static DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static long currentTimeMillis(this DateTime d)
{
return (long) ((DateTime.UtcNow - Jan1st1970).TotalMilliseconds);
}
}
dব্যবহার করা হয়নি। এই কোডটি ব্যবহার করতে আপনি লিখতে পারেন var date = new DateTime(); var millis = date.currentTimeMillis();তবে dateভেরিয়েবলটি কেবল অতিরিক্ত কাজ হবে এবং এর রাজ্যটি কখনও ব্যবহার করা হয়নি। যখন কোনও এক্সটেনশান পদ্ধতি তৈরি করা অবজেক্টের স্থিতি ব্যবহার না করা হয় তখন কোডটি কেবল অস্পষ্ট করে। @ হ্যাথ দ্বারা প্রদত্ত উত্তরটি আরও সোজা এগিয়ে এবং অতএব (আমার কাছে) ভাল। হতে পারে @ জোয়েল কোহোর্ন পদ্ধতি শরীরে dপরিবর্তে মানটি ব্যবহার করার ইচ্ছা নিয়েছেন DateTime.UtcNow? আমি এক্সটেনশন পদ্ধতিগুলি বেশ ব্যবহার করি তবে এটির জন্য নয়।
ইউনিক্স টাইমস্ট্যাম্প আনুমানিক করার জন্য এখানে একটি সহজ উপায়। ইউটিসি ব্যবহার করা ইউনিক্স ধারণার কাছাকাছি, এবং আপনাকে এ থেকে গোপনীয় doubleকরতে হবে long।
TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
long millis = (long)ts.TotalMilliseconds;
Console.WriteLine("millis={0}", millis);
মুদ্রণ:
millis=1226674125796
কাঠামোটিতে ১৯ 1970০ সাল থেকে পুরানো সেকেন্ড (বা মিলিসেকেন্ড) অন্তর্ভুক্ত নেই।
নীচের মত আপনি যা চেষ্টা করে যাচ্ছেন তা অর্জন করার জন্য আমি কেবল সর্বাধিক সোজা অগ্রসর উপায় বিবেচনা করছি:
DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond
DateTime.UtcNowএকটি ভাল বিকল্প
আপনি যদি জিএনইউ / লিনাক্স এবং উইন্ডোজ (অন্তত সাতটি) এর অধীনে বিভিন্ন প্রক্রিয়া, বিভিন্ন ভাষা (জাভা, সি, সি #) এর মধ্যে তুলনা করার জন্য একটি টাইমস্ট্যাম্প চান:
সি #:
private static long nanoTime() {
long nano = 10000L * Stopwatch.GetTimestamp();
nano /= TimeSpan.TicksPerMillisecond;
nano *= 100L;
return nano;
}
জাভা:
java.lang.System.nanoTime();
সি জিএনইউ / লিনাক্স:
static int64_t hpms_nano() {
struct timespec t;
clock_gettime( CLOCK_MONOTONIC, &t );
int64_t nano = t.tv_sec;
nano *= 1000;
nano *= 1000;
nano *= 1000;
nano += t.tv_nsec;
return nano;
}
সি উইন্ডোজ:
static int64_t hpms_nano() {
static LARGE_INTEGER ticksPerSecond;
if( ticksPerSecond.QuadPart == 0 ) {
QueryPerformanceFrequency( &ticksPerSecond );
}
LARGE_INTEGER ticks;
QueryPerformanceCounter( &ticks );
uint64_t nano = ( 1000*1000*10UL * ticks.QuadPart ) / ticksPerSecond.QuadPart;
nano *= 100UL;
return nano;
}
আমি জানি যে সমমানের জন্য প্রশ্ন জিজ্ঞাসা করছে তবে যেহেতু আমি এই 2 টি একই কাজের জন্য ব্যবহার করি আমি গেটটিকাউন্টে ফেলেছি । আমি নস্টালজিক হতে পারি তবে টিকিট পাওয়ার জন্য আমি কেবল সিস্টেম কন্ট্রোনটাইমমিলিস () এবং গেটটিকাউন্ট () ব্যবহার করি।
[DllImport("kernel32.dll")]
static extern uint GetTickCount();
// call
uint ticks = GetTickCount();