জোনডেটটাইমকে তারিখে রূপান্তর কীভাবে করবেন?


105

আমি আমার ডাটাবেসে একটি সার্ভার অজোনস্টিক তারিখের সময় সেট করার চেষ্টা করছি এবং আমি বিশ্বাস করি যে এটি করার সর্বোত্তম অনুশীলনটি একটি ইউটিসি ডেটটাইম সেট করা set আমার ডিবি সার্ভারটি ক্যাসান্দ্রা এবং জাভার জন্য ডিবি ড্রাইভার কেবল তারিখের ধরণটি বুঝতে পারে।

সুতরাং ধরে নিচ্ছি যে আমার কোডে আমি এখন নতুন ইউসিটি পেতে জাভা 8 জোনডেটটাইম ব্যবহার করছি ( ZonedDateTime.now(ZoneOffset.UTC)), আমি কীভাবে এই জোনেডেটটাইম উদাহরণটি "উত্তরাধিকার" তারিখ শ্রেণিতে রূপান্তর করতে পারি?


জাভাতে নির্মিত দুটি "তারিখ" শ্রেণি রয়েছে java.util.Dateএবং java.sql.Date
তুলসী বাউরক

উত্তর:


170

আপনি জোনেডেটটাইমকে তাত্ক্ষণিকভাবে রূপান্তর করতে পারেন, যা আপনি ডেটের সাথে সরাসরি ব্যবহার করতে পারেন।

Date.from(java.time.ZonedDateTime.now().toInstant());

29
না, এটি আপনার জোন সিস্টেম ডিফল্টে বর্তমান তারিখ হবে।
স্লিম সোলতানি দ্রদি

6
@ মিলেনকোভাছেভ আপনার প্রশ্নের কোনও অর্থ নেই - একটি তারিখের সময় অঞ্চল নেই - এটি কেবল সময়ে তাত্ক্ষণিকভাবে উপস্থাপন করে।
Assylias

4
@Asslias আসলে, আপনার বক্তব্যটি বোঝায় না। যে ফর্ম্যাটটিতে সময়টি সংরক্ষণ করা হয় তা টাইমজোনকে বোঝায়। তারিখটি ইউটিসি-র উপর ভিত্তি করে তৈরি করা হয়েছে, দুর্ভাগ্যক্রমে, জাভা কিছু বোকা কাজ করে এবং এটি এর মতো করে না এবং এর শীর্ষে সময়টিকে ইউটিসির পরিবর্তে স্থানীয় টিজেড হিসাবে বিবেচনা করে। ডেটা, লোকালডেটটাইম, জোনডেটটাইম টাইম স্টোর ডেটা যেভাবে টাইমজোনকে বোঝায়। তারা যেভাবে ব্যবহার করবে তা হ'ল টিজেডের অস্তিত্ব নেই, যা কেবল ভুলভাবে ভুল। java.util.Date এর জেভিএম ডিফল্টের একটি টিজেড রয়েছে, স্পষ্টভাবে। লোকে একে অন্যরকম কিছু হিসাবে বিবেচনা করে (এর জন্য জাভা ডক্স সহ!) কেবল খারাপ লোক।
ডেভিড

4
@ ডেভিড উহ না - Dateএ যুগের পূর্ব থেকে অনেক মিলি সেকেন্ড - তাই এটি ইউটিসির সাথে সম্পর্কিত। আপনি যদি এটি মুদ্রণ করেন তবে ডিফল্ট সময় অঞ্চলটি ব্যবহার করা হবে, তবে তারিখ শ্রেণীর ব্যবহারকারীর টাইমজোন সম্পর্কে কোনও জ্ঞান নেই ... উদাহরণস্বরূপ ডকস.ওরাকল / জ্যাভ্যাস / টিউটোরিয়াল / তারিখ সময় / আইসো / ব্লগ্যাসিতে "ম্যাপিং" বিভাগটি দেখুন .html এবং লোকালডেটটাইম স্পষ্টভাবে কোনও টাইমজোনকে উল্লেখ না করে - যা বিভ্রান্তিকর হিসাবে দেখা যেতে পারে ...
অ্যাসিরিয়াস

4
আপনার উত্তর অহেতুক জড়িত ZonedDateTimejava.time.Instantক্লাসের জন্য একটি সরাসরি প্রতিস্থাপন java.util.Date, উভয় যদিও ইউটিসি একটি মুহূর্ত প্রতিনিধিত্বমূলক Instantব্যবহারসমূহ মিলিসেকেন্ড পরিবর্তে ন্যানোসেকেন্ড একটি তীক্ষ্ণ স্বরূপ রেজল্যুশন। Date.from( Instant.now() )আপনার সমাধান করা উচিত ছিল। বা সেই বিষয়ে, ঠিক new Date()একই প্রভাব রয়েছে, ইউটিসিতে বর্তমান মুহুর্তটি ক্যাপচার করে।
তুলসী বাউরকের

70

tl; ডা

java.util.Date.from(  // Transfer the moment in UTC, truncating any microseconds or nanoseconds to milliseconds.
    Instant.now() ;   // Capture current moment in UTC, with resolution as fine as nanoseconds.
)

যদিও উপরের কোডটিতে কোনও বক্তব্য ছিল না। উভয়ই java.util.Dateএবং Instantসর্বদা ইউটিসিতে ইউটিসিতে একটি মুহুর্ত উপস্থাপন করে। উপরের কোডটির একই প্রভাব রয়েছে:

new java.util.Date()  // Capture current moment in UTC.

এখানে ব্যবহারের কোনও সুবিধা নেই ZonedDateTime। আপনার যদি ইতিমধ্যে একটি থাকে তবে ZonedDateTimeএকটিটি বের করে UTC এ সামঞ্জস্য করুন Instant

java.util.Date.from(             // Truncates any micros/nanos.
    myZonedDateTime.toInstant()  // Adjust to UTC. Same moment, same point on the timeline, different wall-clock time.
)

অন্যান্য উত্তর সঠিক

উত্তর দ্বারা ssoltanid সঠিকভাবে আপনার নির্দিষ্ট প্রশ্ন ঠিকানাগুলি, কিভাবে একটি নতুন স্কুল java.time বস্তু (রূপান্তর করতে ZonedDateTimeএকটি পুরানো স্কুল পর্যন্ত) java.util.Dateঅবজেক্ট। Instantজোনেডেটটাইম থেকে এটিকে বের করুন এবং এতে পাস করুন java.util.Date.from()

ডেটা ক্ষতি

মনে রাখবেন আপনি হবে ডেটা হারিয়ে ভোগে হিসাবে, Instantগানগুলি ন্যানোসেকেন্ড যেহেতু কাল যখন java.util.Dateট্র্যাক মিলিসেকেন্ড যুগান্তকারী গেছে।

ডায়াগ্রামটি মিলিসেকেন্ড, মাইক্রোসেকেন্ড এবং ন্যানোসেকেন্ডের রেজোলিউশনের তুলনা করে

আপনার প্রশ্ন এবং মন্তব্য অন্যান্য সমস্যা উত্থাপন।

সার্ভারগুলিকে ইউটিসিতে রাখুন

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

সময় অঞ্চল নির্দিষ্ট করুন

তবে আপনার কখনই জেভিএমের বর্তমান ডিফল্ট টাইম জোনের উপর নির্ভর করা উচিত নয়। হোস্ট সেটিংটি বাছাইয়ের পরিবর্তে, একটি জেভিএম চালু করার সময় একটি পতাকা উত্তীর্ণ হয়ে অন্য একটি সময় অঞ্চল নির্ধারণ করতে পারে। আরও খারাপ: কোনও অ্যাপের যে কোনও থ্রেডের যে কোনও কোড যে কোনও মুহুর্তে java.util.TimeZone::setDefaultরানটাইমের সময় সেই ডিফল্টটি পরিবর্তন করার জন্য কল করতে পারে!

ক্যাসান্দ্রার Timestampপ্রকার

যে কোনও শালীন ডাটাবেস এবং ড্রাইভারের স্টোরের জন্য ইউটিসিতে একটি পাস করা তারিখ-সময়কে স্বয়ংক্রিয়ভাবে পরিচালনা করতে হবে। আমি ক্যাসান্দ্রা ব্যবহার করি না, তবে মনে হয় এটি তারিখের জন্য কিছু প্রাথমিক সহায়তা পেয়েছে। ডকুমেন্টেশন বলছে যে এর Timestampপ্রকারটি একই যুগ থেকে মিলিসেকেন্ডের একটি গণনা (ইউটিসিতে 1970 এর প্রথম মুহূর্ত)।

আইএসও 8601

তদতিরিক্ত, ক্যাসান্দ্রা আইএসও 8601 স্ট্যান্ডার্ড ফর্ম্যাটে স্ট্রিং ইনপুট গ্রহণ করে। ভাগ্যক্রমে, জাভা.টাইম স্ট্রিং পার্সিং / উত্পন্ন করার জন্য এটির ডিফল্ট হিসাবে আইএসও 8601 ফর্ম্যাটগুলি ব্যবহার করে। Instantশ্রেণী ' toStringবাস্তবায়ন চমত্কারভাবে চেষ্টা করতে হবে।

যথার্থতা: মিলিসেকেন্ড বনাম ন্যানোসেকর্ড

তবে প্রথমে আমাদের জোনডেটটাইম টাইমের ন্যানোসেকেন্ড যথার্থতাটিকে মিনিসেকেন্ডে হ্রাস করতে হবে। একটি উপায় হ'ল মিলিসেকেন্ড ব্যবহার করে একটি তাজা তাত্ক্ষণিক তৈরি করা। ভাগ্যক্রমে, জাভা.টাইমের কাছে মিলিসেকেন্ডে এবং থেকে রূপান্তর করার জন্য কয়েকটি কার্যকর পদ্ধতি রয়েছে।

উদাহরণ কোড

এখানে জাভা 8 আপডেট 60-তে কিছু উদাহরণ কোড রয়েছে।

ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) );
…
Instant instant = zdt.toInstant();
Instant instantTruncatedToMilliseconds = Instant.ofEpochMilli( instant.toEpochMilli() );
String fodderForCassandra = instantTruncatedToMilliseconds.toString();  // Example: 2015-08-18T06:36:40.321Z

অথবা এই ক্যাসান্দ্রা জাভা ড্রাইভার ডক অনুসারে আপনি একটি java.util.Dateউদাহরণ পাস করতে পারেন (এতে বিভ্রান্ত হবেন না java.sqlDate)। সুতরাং আপনি instantTruncatedToMillisecondsউপরের কোড থেকে একটি জুডেট করতে পারেন ।

java.util.Date dateForCassandra = java.util.Date.from( instantTruncatedToMilliseconds );

যদি এটি প্রায়শই করা হয় তবে আপনি ওয়ান লাইনার তৈরি করতে পারেন।

java.util.Date dateForCassandra = java.util.Date.from( zdt.toInstant() );

তবে সামান্য ইউটিলিটি পদ্ধতি তৈরি করা আরও নিকটতর হবে।

static public java.util.Date toJavaUtilDateFromZonedDateTime ( ZonedDateTime zdt ) {
    Instant instant = zdt.toInstant();
    // Data-loss, going from nanosecond resolution to milliseconds.
    java.util.Date utilDate = java.util.Date.from( instant ) ;
    return utilDate;
}

প্রশ্নের তুলনায় এই সমস্ত কোডের মধ্যে পার্থক্যটি লক্ষ্য করুন। প্রশ্নের কোডটি জোনেডেটটাইম টাইম অঞ্চলটি ইউটিসির সাথে সামঞ্জস্য করার চেষ্টা করছিল। তবে এটি প্রয়োজনীয় নয়। ধারণা:

জোনেডেটটাইম = তাত্ক্ষণিক + জোনআইড

আমরা কেবল ইনস্ট্যান্ট অংশটি বের করেছি, যা ইতিমধ্যে ইউটিসি-তে রয়েছে (মূলত ইউটিসিতে, সুনির্দিষ্ট বিশদের জন্য ক্লাস ডকটি পড়ুন)।


জাভাতে আধুনিক এবং উত্তরাধিকার উভয়ই তারিখের সময়ের ধরণের সারণী


জাভা.টাইম সম্পর্কে

Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.DateCalendarSimpleDateFormat

Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।

আরও জানতে, ওরাকল টিউটোরিয়াল দেখুন । এবং অনেকগুলি উদাহরণ এবং ব্যাখ্যাগুলির জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310

আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*

জাভা.টাইম ক্লাস কোথায় পাবেন?

জাভা বা অ্যান্ড্রয়েডের কোন সংস্করণটি ব্যবহার করবে তা জাভা.টাইম লাইব্রেরির সারণী

ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval, YearWeek, YearQuarter, এবং আরো


বিস্ময়কর ব্যাখ্যা, ভাল বিস্তারিত। তোমাকে অনেক ধন্যবাদ!
জিয়ানমার্কো এফ।

5

যদি আপনি অ্যান্ড্রয়েডের জন্য থ্রিটেন ব্যাকপোর্ট ব্যবহার করেন এবং নতুনটি ব্যবহার করতে না পারেন Date.from(Instant instant)(যার জন্য নূন্যতম এপিআই 26 প্রয়োজন) আপনি ব্যবহার করতে পারেন:

ZonedDateTime zdt = ZonedDateTime.now();
Date date = new Date(zdt.toInstant().toEpochMilli());

বা:

Date date = DateTimeUtils.toDate(zdt.toInstant());

দয়া করে বাসিল বাউরকের উত্তরের পরামর্শটিও পড়ুন


4
থ্রিটেন ব্যাকপোর্ট (এবং থ্রিটেনএবিপি) DateTimeUtilsরূপান্তর পদ্ধতিগুলির সাথে একটি শ্রেণি অন্তর্ভুক্ত করে, তাই আমি তারিখের তারিখ = তারিখটাইমUtils.toDate (zdt.toInstant ()) ব্যবহার করি `` এটি এত নিচু স্তরের নয়।
ওলে ভিভি

4

বর্তমান সিস্টেম সময়কে ইউটিসিতে রূপান্তর করার একটি উদাহরণ এখানে রয়েছে। এটি জোনডেটটাইমকে স্ট্রিং হিসাবে ফর্ম্যাট করার সাথে জড়িত থাকে এবং তারপরে স্ট্রিং অবজেক্টটি জাভা.টেক্সট ডেটফর্ম্যাট ব্যবহার করে একটি তারিখ অবজেক্টে পার্স করা হবে।

    ZonedDateTime zdt = ZonedDateTime.now(ZoneOffset.UTC);
    final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss");
    final DateFormat FORMATTER_YYYYMMDD_HH_MM_SS = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
    String dateStr = zdt.format(DATETIME_FORMATTER);

    Date utcDate = null;
    try {
        utcDate = FORMATTER_YYYYMMDD_HH_MM_SS.parse(dateStr);
    }catch (ParseException ex){
        ex.printStackTrace();
    }

1

আপনি জাভা 8 এবং তার পরে নির্মিত জাভা.টাইম ক্লাসগুলি ব্যবহার করে এটি করতে পারেন ।

ZonedDateTime temporal = ...
long epochSecond = temporal.getLong(INSTANT_SECONDS);
int nanoOfSecond = temporal.get(NANO_OF_SECOND);
Date date = new Date(epochSecond * 1000 + nanoOfSecond / 1000000);

দুঃখিত, অস্থায়ী এবং এই সমস্ত ধ্রুবক কোথা থেকে আসছে?
মাইলেন কোবাচেভ

@ মিলেনকোভাছেভ একটি জোনেডেটটাইম টেম্পোরাল একটি উদাহরণ
পিটার ল্যারি

ধন্যবাদ, তবে আপনার উল্লেখ করা উচিত ছিল যে আপনি নিজের উত্তরটি সম্পাদনা করেছেন যাতে আমার মন্তব্যটি নির্বোধ বলে মনে হয় না।
মাইলেন কোভাচেভ

4
@ মিলেনকোভাচেভ আপনি একটি মন্তব্য মুছে ফেলতে পারেন, তবে এটি একটি নির্বুদ্ধ প্রশ্ন নয়।
পিটার লরে

4
এই উত্তরটি কেন হ্রাস পেয়েছে তা আমি বুঝতে অক্ষম। Instantএর ট্র্যাক সেকেন্ড এবং ন্যানোসেকেন্ডস। Dateগুলি ট্র্যাক মিলিসেকেন্ড। এক থেকে অন্যটিতে এই রূপান্তরটি সঠিক।
স্কটব

1

আমি এটি ব্যবহার করি

public class TimeTools {

    public static Date getTaipeiNowDate() {
        Instant now = Instant.now();
        ZoneId zoneId = ZoneId.of("Asia/Taipei");
        ZonedDateTime dateAndTimeInTai = ZonedDateTime.ofInstant(now, zoneId);
        try {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateAndTimeInTai.toString().substring(0, 19).replace("T", " "));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}

কারণ Date.from(java.time.ZonedDateTime.ofInstant(now, zoneId).toInstant()); এটি কাজ করে না !!! আপনি যদি আপনার কম্পিউটারে আপনার অ্যাপ্লিকেশন চালনা করেন তবে সমস্যা নেই। তবে আপনি যদি এডাব্লুএস বা ডকার বা জিসিপির যে কোনও অঞ্চলে চালনা করেন, এটি সমস্যা তৈরি করে। কারণ ক্লাউডে কম্পিউটার আপনার টাইমজোন নয়। কোডে আপনার সঠিক সময় অঞ্চল নির্ধারণ করা উচিত। উদাহরণস্বরূপ, এশিয়া / তাইপেই তারপরে এটি এডাব্লুএস বা ডকার বা জিসিপিতে সংশোধন করবে।

public class App {
    public static void main(String[] args) {
        Instant now = Instant.now();
        ZoneId zoneId = ZoneId.of("Australia/Sydney");
        ZonedDateTime dateAndTimeInLA = ZonedDateTime.ofInstant(now, zoneId);
        try {
            Date ans = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateAndTimeInLA.toString().substring(0, 19).replace("T", " "));
            System.out.println("ans="+ans);
        } catch (ParseException e) {
        }
        Date wrongAns = Date.from(java.time.ZonedDateTime.ofInstant(now, zoneId).toInstant());
        System.out.println("wrongAns="+wrongAns);
    }
}

4
এটি 7 টির উত্তরের যেকোন একটি অন্যতম জটিল উপায় বলে মনে হচ্ছে। এর কোন সুবিধা আছে কি? আমি মনে করি না। ফর্ম্যাটিং এবং পার্সিংয়ের মধ্য দিয়ে যাওয়ার দরকার নেই।
ওলে ভিভি

ধন্যবাদ আপনি জিজ্ঞাসা। কারণ তারিখ ভুলআন্স = তারিখ.ফ্রম (জাভা.টাইম.জোনডেটটাইম.ওফ ইনস্ট্যান্ট (এখন, জোনালআইডি)। টোয়েন্টিস্ট্যান্ট ()) ;; এটা কাজ না !!!!!
beehuang

আমি আমার টাইম জোনে 17:08 এর ঠিক আগে সেকেন্ড স্নিপেট চালিয়েছিলাম এবং পেয়েছি ans=Mon Jun 18 01:07:56 CEST 2018যা ভুল, এবং তারপরে wrongAns=Sun Jun 17 17:07:56 CEST 2018, যা সঠিক।
ওলে ভিভি

আমার কম্পিউটারে অ্যাপ চালানোর সময় আমার কোনও সমস্যা নেই have তবে ডকার ব্যবহার করার সময় এটির সমস্যা আছে। কারণ ডকারে টাইমজোন আপনার কম্পিউটারে টাইমজোন নয়। কোডে আপনার সঠিক সময় অঞ্চল নির্ধারণ করা উচিত। উদাহরণস্বরূপ, এশিয়া / তাইপেই তারপরে এটি এডাব্লুএস, ডকার, জিসিপি বা যে কোনও কম্পিউটারে সংশোধন করবে।
বিহুয়াং

@ ওলেভ.ভি. বুঝতে পারছো ?? বা কোন প্রশ্ন?
beehuang

1

গৃহীত উত্তরটি আমার পক্ষে কার্যকর হয়নি। প্রত্যাবর্তিত তারিখটি সর্বদা স্থানীয় তারিখ এবং মূল সময় অঞ্চলের তারিখ নয়। আমি ইউটিসি + 2 এ থাকি।

//This did not work for me
Date.from(java.time.ZonedDateTime.now().toInstant()); 

জোনডেটটাইম থেকে সঠিক তারিখ পাওয়ার জন্য আমি দুটি বিকল্প উপায় নিয়ে এসেছি।

বলুন আপনার কাছে হাওয়াইয়ের জন্য এই জোনডডেটটাইম রয়েছে

LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ldt.atZone(ZoneId.of("US/Hawaii"); // UTC-10

বা ইউটিসি-র পক্ষে মূলত জিজ্ঞাসা করা হয়েছে

Instant zulu = Instant.now(); // GMT, UTC+0
ZonedDateTime zdt = zulu.atZone(ZoneId.of("UTC"));

বিকল্প ঘ

আমরা java.sql.Timestamp ব্যবহার করতে পারি। এটি সহজ তবে এটি সম্ভবত আপনার প্রোগ্রামিংয়ের অখণ্ডতায় একটি ছিদ্র তৈরি করবে

Date date1 = Timestamp.valueOf(zdt.toLocalDateTime());

বিকল্প 2

আমরা মিলিস থেকে তারিখ তৈরি করি ( আগে এখানে উত্তর দেওয়া হয়েছে )। নোট করুন যে স্থানীয় জোনঅফসেট একটি আবশ্যক।

ZoneOffset localOffset = ZoneOffset.systemDefault().getRules().getOffset(LocalDateTime.now());
long zonedMillis = 1000L * zdt.toLocalDateTime().toEpochSecond(localOffset) + zdt.toLocalDateTime().getNano() / 1000000L;
Date date2 = new Date(zonedMillis);

0

বিহুয়াংয়ের মতো ডকার অ্যাপ্লিকেশনটির জন্য আপনার সময় অঞ্চল নির্ধারণ করা উচিত mented

বিকল্পভাবে আপনি ZoneSameLocal এর সাথে ব্যবহার করতে পারেন । উদাহরণ স্বরূপ:

2014-07-01T00: 00 + 02: 00 [GMT + 02: 00] রূপান্তরিত হয়েছে

Date.from(zonedDateTime.withZoneSameLocal(ZoneId.systemDefault()).toInstant())

থেকে মঙ্গল জুলাই 01 00:00:00 Cest 2014 এবং দ্বারা

Date.from(zonedDateTime.toInstant())

থেকে সোম জুন 30 22:00:00 ইউটিসি 2014


-1

আপনি যদি এখনই আগ্রহী হন, তবে কেবল ব্যবহার করুন:

Date d = new Date();

আমি এখন আগ্রহী কিন্তু ইউটিসি এখন।
মাইলেন কোভাচেভ

4
হ্যাঁ, এটি এখন ইউটিসি হবে, তারিখটি এর চেয়ে ভাল আর জানে না।
জ্যাকব একেল

4
না, তা হবে না। এটি এখন স্থানীয় সিস্টেম টাইম জোনে হবে। তারিখ কোনও টাইমজোন তথ্য সঞ্চয় করে না, তবে এটি বর্তমান সিস্টেমের সময় ব্যবহার করে এবং বর্তমান সিস্টেমের টাইমজোনটিকে উপেক্ষা করে, সুতরাং এটি কখনও ইউটিসি
ডেভিড

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

4
@ জ্যাকোবেইকেল - হ্যাঁ, তবে আপনি যদি সকাল 9 টায় একটি তারিখের মধ্যে রাখেন যখন আপনার টিজেটি ইউএস টিজে এবং তারপরে জেপি টিজে পরিবর্তন করে এবং 9 টার সাথে একটি নতুন তারিখ তৈরি করেন তবে তারিখের অভ্যন্তরীণ মানটি আলাদা হবে। আপনি মিশ্রণে ডিএসটি নিক্ষেপ করার সাথে সাথে আপনার অ্যাপটি সর্বদা ইউটিসি-তে নির্দিষ্টভাবে চালিত না হওয়া পর্যন্ত আপনি নির্ভরযোগ্যভাবে তারিখটি ব্যবহার করতে পারবেন না, যে কোনও কারণে বেশিরভাগ ক্ষেত্রেই খারাপ কোডের চারপাশে ঘোরাফেরা হতে পারে change
ডেভিড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.