Java.time.LocalDate কে java.util.Date প্রকারে রূপান্তর করুন


372

আমি রূপান্তর করতে চান java.time.LocalDateমধ্যে java.util.Dateপ্রকার। কারণ আমি তারিখটি সেট করতে চাই JDateChooser। বা এমন কোনও তারিখ চয়নকারী রয়েছে যা java.timeতারিখগুলি সমর্থন করে ?



2
LGoodDatePicker নেটিভ java.time প্যাকেজ (ওরফে জাভা 8 সময় ব্যবহার করে, বা JSR-310 বিশেষত, LGoodDatePicker তারিখ মান সংরক্ষণ করতে একটি "java.time.LocalDate" ব্যবহার স্ক্রীনশট এবং একটি ডেমো দিকে রয়েছে।। প্রকল্প হোম পেজ
BlakeTNC

উত্তর:


560
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

এটি ধরে নিয়েছে যে আপনার তারিখ চয়নকারী তারিখগুলিকে স্ট্রিংয়ে রূপান্তর করতে সিস্টেম ডিফল্ট টাইমজোন ব্যবহার করে।


জেবি নিজেট সম্ভবত জাভা 8 বিকাশ / প্রকাশের প্রথম পর্যায়ে ছিল এবং @ ব্যবহারকারী3509494 এটি কোনওভাবে এটি পরীক্ষা করছিল।
রাসেলহফ

2
এটি কি এড়ানো সম্ভব atStartOfDay(), যেহেতু এটি তারিখের মান পরিবর্তন করে, যেমনটি আমি এটি বুঝতে পারি।
yegor256

1
@ জেবিনিজেট আপনার উত্তরটি আমার কাছে খুব বেশি অর্থবোধ করে না তাই আমি স্পষ্ট করার সিদ্ধান্ত নিয়েছি। অযথা মন্তব্য করার পরিবর্তে আপনি কেন এটি পরিষ্কার করেন না?
ইয়েগোর 256

12
কারণ আমি কীভাবে এবং কেন এর কোনও ব্যাখ্যা দরকার হবে তা দেখছি না। 232 জন এই উত্তরটি upvated, এটি এটি পরিষ্কার খুঁজে পেয়েছে। আপনি বলেছেন স্টার্টঅফডে তারিখের মান পরিবর্তন করে। এটা বোঝা যায় না। জাভাডোক যা বলছেন তা অস্টার্টঅফডে করেন: এটি একই তারিখে এবং দিনের শুরুতে একটি লোকাল ডেটকে লোকালডেটটাইমে রূপান্তরিত করে।
জেবি নিজেট

2
আপনি কি নিশ্চিত যে আপনার ফলাফলগুলি ভুল? আপনি যদি জার্মানিতে থাকেন তবে 1893 সালের এপ্রিলে জার্মানিতে সময়ের মধ্যে 6 মিনিটের 32 সেকেন্ডের গ্লিটের সাথে এটি করার কিছু হতে পারে details কিছু বিবরণের জন্য সময় ও তারিখ / সময় / জোন / জার্নি / বার্লিন? syear=1850 দেখুন ।
দাউদ ইবনে কেরেম

104

নতুন java.timeক্লাসগুলিকে java.util.Dateঅবজেক্টে রূপান্তর করতে এবং তার বিপরীতে আমি এখানে একটি ইউটিলিটি ক্লাস ব্যবহার করি :

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

public class DateUtils {

  public static Date asDate(LocalDate localDate) {
    return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
  }

  public static Date asDate(LocalDateTime localDateTime) {
    return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
  }

  public static LocalDate asLocalDate(Date date) {
    return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
  }

  public static LocalDateTime asLocalDateTime(Date date) {
    return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
  }
}

@ অলিভ মন্তব্যের ভিত্তিতে সম্পাদিত।


ZoneId.systemDefault()সমস্যাযুক্ত ব্যবহার করছে না কারণ বছরের জোরে সময় অঞ্চলগুলি পরিবর্তিত হয়। সুতরাং যদি 01-জানুয়ারীতে আমি টাইমজোন -05: 00 (কেন্দ্রীয়), তবে তারপরে 01-জুলাই আমি টাইমজোন -06: 00 (সেন্ট্রাল দিবালোক) এর ফলে দিবালোকের সঞ্চয়ের কারণে ভুল ফলাফলের কারণ হতে পারে না সময়?
ঝিলডেন

94

আপনি এই java.sql.Date.valueOf()পদ্ধতিটি ব্যবহার করতে পারেন :

Date date = java.sql.Date.valueOf(localDate);

এখানে সময় এবং সময় অঞ্চল তথ্য যুক্ত করার দরকার নেই কারণ সেগুলি নিখুঁতভাবে নেওয়া হয়েছে।
দেখুন java.util.Date করার LOCALDATE এবং simpliest রূপান্তর বিপরীতভাবে ভাইস?


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

7
java.sql.Dateডাটাবেস স্তর, জেডিবিসি, জেপিএ বোঝানো হচ্ছে। ওয়েব স্তর (বা যে কোনও ক্লায়েন্ট অ্যাপ্লিকেশন) একেবারে যে কোনও নির্ভরতা থেকে মুক্ত হওয়া উচিত java.sql.*
ক্ষুদ্র

2
@Tiny java.sql. তারিখ rt.jar এ থাকে। কোনও বাহ্যিক নির্ভরতা নেই। আপনি কেবল ভাষার বৈশিষ্ট্যগুলি ব্যবহার করেন।
জর্জ

2
java.sql.Dateঠিক java.util.Dateএটির সময় নির্ধারণের সাথেই 00:00:00তবে ডিজাইনের দৃষ্টিকোণটি হ'ল এটি java.sql.*কোনও সামনের স্তরের জন্য নয় যা ক্লায়েন্টরা সার্লেলেটস / জেএসপির মতো ইন্টারেক্ট করে। java.util.Dateজাভা সাইডে এবং java.sql.Timestampবা java.sql.*জেডিবিসি পাশ থেকে যা কিছু প্রযোজ্য
ক্ষুদ্র

5
এই "ভয়ঙ্কর হ্যাক" java.time সঙ্গে অনুযায়ী হবে * লেখক:। Stackoverflow.com/questions/33066904/... । জাভাতে 9 টি java.sql.*শ্রেণি পৃথক নির্ভরতা হবে।
ধেরিক

16

জাভা.টাইমের টেম্পোরাল ইন্টারফেস রয়েছে যা আপনি বেশিরভাগ সময় ক্লাস থেকে তাত্ক্ষণিক বস্তু তৈরি করতে ব্যবহার করতে পারেন। তাত্ক্ষণিকতা ইপচের সময়রেখায় মিলিসেকেন্ডগুলি উপস্থাপন করে - অন্যান্য সমস্ত তারিখ এবং সময়গুলির জন্য বেস রেফারেন্স।

রূপান্তর করতে আমাদের সময়কে একটি জোনডেটটাইম, একটি সময় এবং একটি অঞ্চল সহ রূপান্তর করতে হবে:

LocalDate ldate = ...;
Instant instant = Instant.from(ldate.atStartOfDay(ZoneId.of("GMT")));
Date date = Date.from(instant);

12

অর্ডার তৈরি করার জন্য java.util.Date A থেকে java.time.LocalDate , আছে তোমার কাছে

  • লোকালডেটে একটি সময় যুক্ত করুন
  • একটি সময় অঞ্চলের মধ্যে তারিখ এবং সময় ব্যাখ্যা করুন
  • যুগের পর থেকে সেকেন্ড / মিলিসেকেন্ডের সংখ্যা পান
  • java.util.Date তৈরি করুন

কোডটি নিম্নলিখিত হিসাবে দেখাতে পারে:

LocalDate localDate = LocalDate.now();
Date date = new Date(localDate.atStartOfDay(ZoneId.of("America/New_York")).toEpochSecond() * 1000);

1
জোন আইডিতে টাইপ করুন (জোনআইএফ)
অ্যাসিরিয়াস

লোকালডেট.এটস্টার্টঅফডে () একটি জোনেডেটটাইম তৈরি করে, তবে জোনেডেটটাইমের জন্য কোনও ইপসেকেন্ড () পদ্ধতি নেই is
কেভিন স্যাডলার

@ কেভিনস্যাডলার: পদ্ধতিটি toEpochSecondউত্তরাধিকার সূত্রে প্রাপ্ত java.time.chrono.ChronoZonedDateTimeডকস.ওরকল
জাভাজেস /

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

11

এটি আমার পক্ষে কাজ করে:

java.util.Date d = new SimpleDateFormat("yyyy-MM-dd").parse(localDate.toString());

https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#toString--


6
এটি বেশ অযোগ্য
AndresQ

1
তাত্ক্ষণিকভাবে রূপান্তরিত হওয়া ভার্জোজ হতে পারে তবে স্ট্রিং তৈরি করা এবং পার্স করা নিউইয়র্ক থেকে মেক্সিকো সিটিতে টোকিও হয়ে যাওয়ার মতো ...
এহেকাটল

1
হ্যাঁ, এত দক্ষ নয়, তবে বেশিরভাগ সমাধান খুব ভার্জোজ। এটি কেবল ভার্বোজ এবং এটি পড়া এবং বোঝা সহজ।
সেকলক

2
ভবিষ্যতে এনওয়াই -> টোকিও -> মেক্সিকো সিটি কয়েক ঘন্টা (গুলি) এর মধ্যে সম্পন্ন হতে পারে;)
স্টিফান

3

কোটলিন সমাধান:

1) এই এক্সটেনশন ফাংশনটি কোথাও আটকান।

fun LocalDate.toDate(): Date = Date.from(this.atStartOfDay(ZoneId.systemDefault()).toInstant())

2) এটি ব্যবহার করুন, এবং এটি আবার কখনও গুগল।

val myDate = myLocalDate.toDate()

11
"কোটলিনে স্যুইচ করুন" কীভাবে সহজ? এটি একটি জাভা প্রশ্ন।
এহ্যাকাতল

1
জাভা লোকাল ডেটকে তারিখে রূপান্তর করা যে কোনও জেভিএম বিকাশকারীদের জন্য একটি সাধারণ, বিরক্তিকর সমস্যা। এটি কোটলিন বিকাশকারীদের জন্য একটি সমাধান।
gyoder



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