কীভাবে JVM টাইমজোনটি সঠিকভাবে সেট করবেন


141

আমি জাভা প্রোগ্রাম চালানোর চেষ্টা করছি, তবে এটি কোনও ওএস নির্ধারিত টাইমজোনের পরিবর্তে একটি ডিফল্ট জিএমটি টাইমজোন নিচ্ছে। আমার জেডি কে সংস্করণটি 1.5 এবং ওএস হ'ল উইন্ডোজ সার্ভার এন্টারপ্রাইজ (2007)

উইন্ডোজ একটি কেন্দ্রীয় সময় অঞ্চল নির্দিষ্ট করে আছে, কিন্তু আমি নিম্নলিখিত প্রোগ্রামটি চালানোর সময়, এটি আমাকে একটি GMT সময় দেয়।

import java.util.Calendar;

public class DateTest
{
    public static void main(String[] args)
    {
        Calendar now = Calendar.getInstance();
        System.out.println(now.getTimeZone());
        System.out.println(now.getTime());
    }
}

এখানে আউটপুট

sun.util.calendar.ZoneInfo[id="GMT",
offset=0,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
Mon Mar 22 13:46:45 GMT 2010

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

কোন চিন্তা অত্যন্ত প্রশংসা করা হবে।


1
এইচএম, এটি আজব। একটি JVM / OS বাগ বা কিছু অদ্ভুত ভুল কনফিগারেশনের মতো দেখাচ্ছে L
মাইকেল বর্গওয়ার্ট

আপনি কিভাবে প্রার্থনা করছেন DateTest ক্লাস ?
ম্যাট বি বি

@ ম্যাট বি: আমি উইন্ডোজ কমান্ড প্রম্পট থেকে ডেটেস্টেস্ট সংকলন এবং কল করছি। তবে এটি কেবল একটি টেস্ট ক্লাস। মূল সমস্যাটি ছিল আইবিএম কোগনোস সার্ভারের জন্য কিছু ইটিএল প্রক্রিয়া নিয়ে।
কুশল পদ্দিয়াল

1
কেবল কোনও শেল / ব্যাচের স্ক্রিপ্টগুলির মাধ্যমে এটি চালু করার বিষয়টি বাতিল করতে চেয়েছিল যা -Duser.timezoneমানের সাথে উত্তীর্ণ হতে পারে
ম্যাট বি

উত্তর:


220

আপনি JVM এই পারম পাস করতে পারেন

-Duser.timezone

উদাহরণ স্বরূপ

-Duser.timezone=Europe/Sofia

এবং এই কৌশলটি করা উচিত। এনভায়রনমেন্ট ভেরিয়েবল টিজেড সেট করা লিনাক্সেও কৌতুক করে।


আমাদের JDK DST টাইমজোন আপডেট সরঞ্জাম - 1.3.25 (tzupdater) ব্যবহার করতে হবে এবং তারপরে আপনার পরামর্শ অনুসারে JVM প্যারামিটারটি পরিবর্তন করতে হবে এবং শেষ পর্যন্ত আমরা সমস্যা থেকে মুক্তি পেয়েছি। উপায় দ্বারা, টাইমজোন তথ্য কিছু রেজিস্ট্রি উইন্ডোজ দ্বারা সংরক্ষণ করা হয়। আমি যে আপডেটেটরটি ব্যবহার করেছিলাম তা রেজিস্ট্রি মানগুলিও আপডেট করে।
কুশল পদ্দিয়াল

1
আমি এই প্যারামিটারটি ব্যবহার করে আমার জেভিএম শুরু করার চেষ্টা করছি, তবে মনে হচ্ছে কোনও পরিবর্তন নেই ... আমি যদি ইউটিসিতে শুরু করতে চাই তবে আমি প্যারামিটার হিসাবে কী ব্যবহার করব !?
rafa.ferreira

আমার অ্যাপ্লিকেশনটিতে আমি কয়েকটি অবস্থান পরিবর্তন করছি এবং সেই জায়গাগুলির টাইমজোন পাচ্ছি the টাইমজোনটি ব্যবহার করে আমি আরও প্রক্রিয়া করছি B তবে যখন অ্যাপ্লিকেশনটি প্রথমবার শুরু হবে, আমি সঠিক মান পাচ্ছি। আমি যখন সময় অঞ্চল পরিবর্তন করি এবং নতুন টাইমজোনকে ডিফল্ট টাইমজোন হিসাবে সেট করি তখন আমি সঠিক মান পাচ্ছি না the সমস্যাটি কী? টাইমজোনকে কীভাবে পরিবর্তন করা যায় আমি টাইমজোন.সেটফেল্ট (টাইমজোন.সেটটাইমজোন ("আমার_টাইম_জোন")) ব্যবহার করে টাইমজোন পরিবর্তন করছি;
ড্রে

2
টিজেডের জন্য সময় অঞ্চলগুলির একটি তালিকা এখানে রয়েছে: en.wikedia.org/wiki/List_of_tz_database_Time_zones । টাইমজোন নামটি অফসেটের চেয়ে ভাল কারণ এটি দিবালোকের সঞ্চয়গুলি পরিচালনা করবে।
ব্রায়ান

65

আপনি নিম্নলিখিত কোড ব্যবহার করে আপনার কোডটিতে ডিফল্ট সময় অঞ্চলও সেট করতে পারেন।

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

তোমার কাছে

 TimeZone.setDefault(TimeZone.getTimeZone("Europe/Sofia"));

1
"দয়া করে নোট করুন যে আমি অ্যাপ্লিকেশন থেকে সময় অঞ্চল নির্ধারণ করতে চাই না।"
AbVog

22

উপরে গৃহীত উত্তর:

-Duser.timezone="Europe/Sofia" 

আমার জন্য ঠিক কাজ করেনি। আমি কেবলমাত্র আমার সময় অঞ্চলটি সফলভাবে পরিবর্তন করতে সক্ষম হয়েছি যখন আমার কাছে পরামিতিগুলির চারপাশে উদ্ধৃতিগুলি নেই:

-Duser.timezone=Europe/Sofia

2
আমি রাজী. উদ্ধৃতিগুলি অপসারণের জন্য আমি মূল উত্তরটি সম্পাদনা করেছি।
গাজেড

1
এটি ব্যবহৃত শেলের উপর নির্ভর করে।
ভাদ্পিপ

10

উইন্ডোজ 7 এবং JDK6 জন্য, আমি যোগ করার জন্য ছিল -Duser.timezone="Europe/Sofia"থেকে JAVA_TOOL_OPTIONS "আমার কম্পিউটার => বৈশিষ্ট্য => অ্যাডভান্সড সিস্টেম সেটিংস => পরিবেশ পরিবর্তনসমূহ" এর অধীনে অবস্থিত সিস্টেম ভেরিয়েবলটি ।

যদি আপনার কাছে ইতিমধ্যে JAVA_TOOL_OPTIONSকোনও স্থান সংযোজনের জন্য অন্য কোনও সম্পত্তি সেট করা থাকে এবং তারপরে আপনার সম্পত্তিটির স্ট্রিং .োকান।


5

দুটি উত্তর যা আমি মনে করি না অন্য উত্তরগুলি কভার করা হয়েছিল:

প্রয়োজন এড়িয়ে চলুন

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

    System.out.println(ZonedDateTime.now(ZoneId.of("Asia/Dushanbe")));

উদাহরণ আউটপুট:

2018-10-11T14: 59: 16.742020 +05: 00 [এশিয়া / দুশানবে]

System.setProperty

অনেকগুলি উদ্দেশ্যে নিম্নলিখিতগুলি পছন্দসই উপায় হবে না এবং এটি অবশ্যই অপব্যবহার করা যেতে পারে। "ফেলে দেওয়া" প্রোগ্রামগুলির জন্য আমি মাঝে মাঝে এটিকে ব্যবহারিক মনে করি। আপনি জাভা থেকে একটি সিস্টেম সম্পত্তি সেট করতে পারেন:

    System.setProperty("user.timezone", "Australia/Tasmania");
    System.out.println(ZonedDateTime.now());

এটি সবেমাত্র মুদ্রিত:

2018-10-11T21: 03: 12.218959 + + 11: 00 [অস্ট্রেলিয়া / তাসমানিয়া]

আপনি যে স্ট্রিংটি যাচ্ছেন তার বৈধতা যদি আপনি চান তবে ব্যবহার করুন:

        System.setProperty("user.timezone", ZoneId.of("Australia/Tasmania").getId());

4

আপনি যদি মাভেন ব্যবহার করছেন :

mvn -Dexec.args="-Duser.timezone=Europe/Sofia ....."

mvn spring-boot:run -Drun.jvmArguments="-Duser.timezone=UTC"স্প্রিং বুট ভি 1 এর জন্য।
ক্লো

0

উইন In এ, আপনি যদি জেআরইতে প্যারামিটার হিসাবে সঠিক টাইমজোনটি সেট করতে চান তবে আপনার স্ট্রিংটি আমার_টাইম_জোন যুক্ত করে deployment.propertiesপাথের মধ্যে সঞ্চিত ফাইলটি সম্পাদনা করতে হবেc:\users\%username%\appdata\locallow\sun\java\deploymentdeployment.javaws.jre.1.args=-Duser.timezone\=


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