সিস্টেম.কন্ট্রেনটাইমমিলিস () কি ইউটিসি সময় ফেরায়?


94

আমি বর্তমান ইউটিসি সময়টি মিলিতে পেতে চাই। আমি গুগল অনুসন্ধান করেছি এবং কিছু উত্তর পেয়েছি যে সিস্টেম.কোর্নটাইমমিলিস () ইউটিসি সময় দেয়। তবে তা হয় না। আমি যদি নিম্নলিখিতগুলি করি:

long t1 = System.currentTimeMillis();
long t2 = new Date().getTime();
long t3 = Calendar.getInstance().getTimeInMillis();

তিনটি বারই প্রায় একই রকম (কলগুলির কারণে পার্থক্য মিলি সেকেন্ডে)।

t1 = 1372060916
t2 = 1372060917
t3 = 1372060918

এবং এই সময়টি ইউটিসির সময় নয় বরং এটি আমার সময় অঞ্চল। অ্যান্ড্রয়েডে আমি কীভাবে বর্তমান ইউটিসি সময় পেতে পারি?


4
1 জানুয়ারী, 1970 00:00:00 ইউটিসি
ব্ল্যাকবেল্ট


4
লম্বা টি 3 = ক্যালেন্ডার.জেটইনস্ট্যান্স (টাইমজোন.সেটটাইমজোন ("ইউটিসি"))। গেটটাইমইনমিলিস ();
ব্ল্যাকবেল্ট

4
উপরের লিঙ্কটিতে বলা হয়েছে "" কম্পিউটার সময় "এবং সমন্বিত সার্বজনীন সময় (ইউটিসি) এর মধ্যে উদ্ভূত সামান্য বিভেদগুলির আলোচনার জন্য শ্রেণীর তারিখের বিবরণ দেখুন See" এবং java.util. তারিখের ডকুমেন্টেশনগুলিতে আপনি দেখতে পান: "যদিও তারিখ শ্রেণি সমন্বিত সর্বজনীন সময় (ইউটিসি) প্রতিবিম্বিত করার উদ্দেশ্যে করা হয়েছে, তবে এটি জাভা ভার্চুয়াল মেশিনের হোস্ট পরিবেশের উপর নির্ভর করে ঠিক তেমনটি করতে পারে না" -> সুতরাং এটি হতে পারে আপনার মেশিনটি অ ইউটিসি সময় না
ফেরানোর সম্ভাবনা রয়েছে

4
@ g.revolve: এটি "1 জানুয়ারী, 1970 সাল থেকে 0000:00 ইউটিসি" মিলিসেকেন্ডের সংখ্যা "- আপনি কীভাবে একটি টাইম জোনের জন্য সামঞ্জস্য করতে আশা করবেন? আপনার স্থানীয় সময় অঞ্চলটি সেই যুগের পর থেকে কত মিলি সেকেন্ড ঘটেছে তা প্রভাবিত করে না।
জন স্কিটি

উত্তর:


136

আপনার প্রদর্শিত তিনটি লাইনই ইউনিক্স যুগের সময় থেকে মিলিসেকেন্ডের সংখ্যা দেবে, যা সময় নির্ধারিত পয়েন্ট, আপনার স্থানীয় সময় অঞ্চল দ্বারা প্রভাবিত হয় না।

আপনি বলছেন "এই সময়টি ইউটিসি সময় নয়" - আমার সন্দেহ হয় যে আপনি আসলে এটি ভুলভাবে চিহ্নিত করেছেন। আমি এজন্য epochconverter.com ব্যবহার করার পরামর্শ দেব । উদাহরণস্বরূপ, আপনার উদাহরণে:

1372060916 = Mon, 24 Jun 2013 08:01:56 GMT

যখন আপনি যে মান উত্পন্ন আমরা জানি না, কিন্তু যদি না এটি ছিল আসলে 8:01 টা ইউটিসি এটি আপনার সিস্টেমে ঘড়ি নিয়ে একটি সমস্যা হয়েছে।

একটিও নিজের System.currentTimeMillisমধ্যে মান বা সময় মান Dateদ্বারা প্রভাবিত হয় না। যাইহোক, আপনি জেনে রাখুন যে হওয়া উচিত Date.toString() নেই স্থানীয় সময় জোন, যা চিন্তা মধ্যে বিপথগামী অনেক ডেভেলপার করে একটি ব্যবহার Dateমজ্জাগতভাবে কোন সময় জোন সঙ্গে যুক্ত করা হয় - এটা না, এটি ঠিক সময়ে একটি তাত্ক্ষণিক, একটি সংশ্লিষ্ট সময়ের অঞ্চল বা এমনকি ক্যালেন্ডার সিস্টেম ছাড়া না।


6
সুতরাং মূলত, এর অর্থ এই যে এই ফাংশনটি একই সময়ের সাথে একই সময়ে বিভিন্ন সময় অঞ্চল থেকে ডেকে আনা হয়, হোস্টের ঘড়ি নির্বিশেষে, সঠিক?
ফিলিপ

16
মানুষ এটি আমার ইচ্ছা করে যে পৃথিবী (একটি) একক সময় অঞ্চল গ্রহণ করতে পারে। আকাশে বড় উজ্জ্বল জিনিসটি উপস্থিত হলে ঘড়ির নম্বর 00:00 বা 08:00 হয় কে কে যত্ন করে? এই historical
তিহাসিক

এর সাথে সম্পর্কিত, নোট করুন যে ওএস ক্লক ফাংশনে অন্তর্নিহিত কলটিতে বেশ কয়েকটি মিলিসেকেন্ডের একটি ডকুমেন্টেড 'ড্রিফ্ট' রয়েছে। জাভাতে একটি 'হাই পারফরম্যান্স টাইমার' থাকে যদি অভিপ্রায়টি একটি অপারেশনের অত্যন্ত সুনির্দিষ্ট সময়কাল (কোনও কাজ শুরু হওয়ার সাথে সাথে শেষ হয়ে যাওয়ার সময়, ব-দ্বীপটি সময় অতিবাহিত পরিমাণে হয়ে থাকে) পেতে চায়। দেখুন: docs.oracle.com/javase/7/docs/api/java/lang/…
ড্যারেল

@ জনস্কিট যদি টু স্ট্রিং () অভ্যন্তরীণভাবে টাইমজোন ব্যবহার করে তবে আমি কীভাবে টাইমজোন ছাড়াই স্ট্রিং তৈরি করতে পারি। আসলে আমি আরইএসটি সার্ভারে ফাইল তৈরি করছি যা মধ্যরাতের সময়মূল্যের ঠিক "1551139200.json" (ফেব্রুয়ারী 26, 2019 12:00:00 এএম) এর ফাইল নাম রেখেছিল এবং এটি একবার ডিভাইসের সিস্টেমকন্ট্রেন্টটাইমমিলিস () এর পরে অ্যান্ড্রয়েড অ্যাপ থেকে অ্যাক্সেস করা দরকার) সঠিক সময় ফেরত দেয়।
কিরণ

@ ক্যারিংকিং: Date.getTime()ইউনিক্স-যুগের সময় থেকে মিলিসেকেন্ডগুলি খুঁজে পেতে, 1000 দ্বারা বিভাজন করুন (যেমন ফাইলের নামটি ইউনিক্সের পর্বের কয়েক সেকেন্ডের মধ্যে রয়েছে ) এবং কেবল সেই সংখ্যাকে একটি স্ট্রিং হিসাবে ফর্ম্যাট করুন।
জন স্কিটি

2

আমি নিশ্চিত করতে পারি যে তিনটি কলই স্থানীয় সময়ের উপর নির্ভর করতে পারে , পর্বকে বিবেচনা করে, Date.toString()কোনও বা অনুরূপ কোনও পদ্ধতি নয়। আমি এগুলি অ্যান্ড্রয়েড ২.৩ চালিত নির্দিষ্ট ডিভাইসে স্থানীয় সময়ের উপর নির্ভর করে দেখেছি। আমি তাদের অন্যান্য ডিভাইস এবং অ্যান্ড্রয়েড সংস্করণ দিয়ে পরীক্ষা করিনি। এই ক্ষেত্রে, স্থানীয় সময়টি ম্যানুয়ালি নির্ধারণ করা হয়েছিল।

স্বতন্ত্র ইউটিসি সময় পাওয়ার একমাত্র নির্ভরযোগ্য উপায়টি ব্যবহার করে একটি অবস্থান আপডেটের জন্য অনুরোধ করা হচ্ছে GPS_PROVIDER। এ getTime()থেকে পুনরুদ্ধার করা কোনও অবস্থানের মান NETWORK_PROVIDERস্থানীয় সময়ের উপর নির্ভর করে। অন্য বিকল্পটি এমন একটি সার্ভারকে পিং করছে যা কোনও ইউটিসি টাইমস্ট্যাম্পকে রিটার্ন দেয়।

সুতরাং, আমি যা করি তা নিম্নলিখিত:

public static String getUTCstring(Location location) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    String date = sdf.format(new Date(location.getTime()));
    // Append the string "UTC" to the date
    if(!date.contains("UTC")) {
        date += " UTC";
    }
    return date;
}

4
সিস্টেম.কোয়েন্টারটাইমমিলিস () একটি ইউটিসি ভিত্তিক মান প্রদান করে। অপারেটিং সিস্টেমের ঘড়ির 'যথার্থতা' বা যথার্থতা সম্পর্কিত, যদিও অবশ্যই এটি ফলাফলকে প্রভাবিত করে, কোনওভাবেই সিস্টেম বা জাভা পরিবেশের সময়-অঞ্চল মানের সাথে সম্পর্কিত নয়।
ড্যারেল টিগু

@ ড্যারেলটিগ আমি জোর দিয়েছি, আমি একটি নির্দিষ্ট হুয়াওয়ে ডিভাইসে বিভিন্ন মান দেখেছি। সুতরাং না, এটি সর্বদা সঠিক ইউটিসি সময় দেয় না (
যথার্থ

ওপির প্রশ্ন ছিল জাভা ক্লাসের সময় অঞ্চল ব্যবহার সম্পর্কে। এটি হার্ডওয়্যার বা প্রত্যাবর্তিত সময়ের মানের নির্ভুলতা সম্পর্কে নয়। সরল কথায় বলতে গেলে, জেভিএম অপারেটিং "সিস্টেম ক্লক" (যা এটি কীভাবে কাজ করে তার ভিত্তিতে অপারেটিং সিস্টেমের দ্বারা পরিবর্তিত হয়) থেকে তার সময় পায়। আরও দেখুন: drdobbs.com/embedded-systems/... এবং "সি" অপারেটিং সিস্টেমে বাস্তবায়নের chemie.fu-berlin.de/chemnet/use/info/libc/libc_17.html
ড্যারেল Teague
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.