জাভা টাইমস্ট্যাম্প - 23/09/2007 তারিখের সাথে আমি কীভাবে একটি টাইমস্ট্যাম্প তৈরি করতে পারি?


উত্তর:


157

দ্বারা Timestamp, আমি আপনার মানে মানে java.sql.Timestamp। আপনি লক্ষ্য করবেন যে এই শ্রেণীর একটি নির্মাতা রয়েছে যা একটি longযুক্তি গ্রহণ করে accep আপনি DateFormatক্লাসটি ব্যবহার করে এটি পার্স করতে পারেন :

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);

4
সাধারণ আইএসও তারিখের ফর্ম্যাটটি হ্যাঁ-এমএম-ডিডি, অন্যথায় দুর্দান্ত!
vidstige

4
নতুন টাইমস্ট্যাম্প (সময়); ত্রুটি প্রদান করে যে এই ধরণের কোনও নির্মাতা দীর্ঘ মূল্যবান হন :(
ভানু শর্মা

4
@ ভানু ডক্সটি দেখায় যে এটি একটি দীর্ঘ মূল্য নিয়েছে এবং সঠিকভাবে কাজ করতে দেখা যাচ্ছে: ডকস.ওরকল
//

অবগতির জন্য, যেমন ভয়ঙ্কর বিরক্তিজনক পুরাতন তারিখ-সময় শ্রেণীর java.util.Date, java.util.Calendarএবং java.text.SimpleDateFormatএখন উত্তরাধিকার দ্বারা supplanted java.time জাভা 8 এবং পরে পাতাটা ক্লাস। ওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
বাসিল বার্ক

123

এই সম্পর্কে কি?

java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf("2007-09-23 10:10:10.0");

4
টাইমস্ট্যাম্প টাইমস্ট্যাম্প = টাইমস্ট্যাম্প.ভ্যালুওফ ("2007-09-23 10: 10: 10.0"); জেডিকে Time
আশীষ রতন

নতুন টাইমস্ট্যাম্প (সময়); ত্রুটি প্রদান করে যে এর মতো কোনও নির্মাণকারীর স্ট্রিংয়ের মান নেই :(
ভানু শর্মা

@ ভানু কনস্ট্রাক্টর ইউনিক্স সময়টি মিলিসেকেন্ডে নিয়ে যায়। আপনি যদি স্ট্রিং থেকে টাইমস্ট্যাম্প পেতে চান তবে স্থিতিশীল পদ্ধতি মানটি ব্যবহার করুন।
হাজোক

4
এটি প্রশ্নের উত্তরের উত্তর বলে মনে হচ্ছে।
হাজোক

4
সেরা উত্তরের তারিখ রয়েছে, যা অবহেলা করা হয়েছে, এটি ব্যবহার করা খারাপ অভ্যাস। এই উত্তরগুলি আরও ভাল। আপনাকে ধন্যবাদ
Alberici

18

টাইমস্ট্যাম্প বলতে কী বোঝ? আপনি যদি ইউনিক্স পর্বের সময় থেকে মিলিসেকেন্ডগুলি বোঝাতে চান:

GregorianCalendar cal = new GregorianCalendar(2007, 9 - 1, 23);
long millis = cal.getTimeInMillis();

আপনি যদি সত্যিকারের java.sql.Timestamp অবজেক্টটি চান:

Timestamp ts = new Timestamp(millis);

4
ভুল এবং সংকলন হবে না! সংকলন ত্রুটি: 09 একটি অষ্টাল সংখ্যা, তবে 9 টি অক্টালগুলির সীমার বাইরে। যুক্তি ত্রুটি: মাসটি 0-ভিত্তিক, আপনি
অক্টোবরের

সংকলন না করলে আমি যুক্তি ত্রুটি পেতে পারি না। :) সিরিয়াসলি, ভাল ক্যাচস, কার্লোস। অষ্টালটি আমি আগে ধরেছিলাম তবে যাইহোক ভুল পেস্ট করেছি। :(
ম্যাথু ফ্ল্যাশেন

আসলে টাইমস্ট্যাম্প নির্মাণকারীর চিত্রিত হয়েছে বরং আপনি টাইমস্ট্যাম্প.ভালিউওফ () পদ্ধতিটি ব্যবহার করতে পারবেন
শিব কমুরাভেলি

@ শিভা কমুরাভলি সমস্ত টাইমস্ট্যাম্প কনস্ট্রাক্টর অবহেলিত এবং কমপক্ষে না যা মিলিসেকেন্ড হিসাবে দীর্ঘ সময় নেয়, কনস্ট্রাক্টর যেটি আর্গুমেন্ট হিসাবে তারিখ নেয় তার অবসন্ন হয়
কোন নাম নেই

এবং এর জন্য একটি ধ্রুবক রয়েছে (মাসের পরিবর্তে = 9):Calendar.SEPTEMBER
গিলিয়াম হুস্টা

12

tl; ডা

java.sql.Timestamp.from (
    LocalDate.of ( 2007 , 9 , 23 )
             .atStartOfDay( ZoneId.of ( "America/Montreal" ) )
             .toInstant()
)

java.time

আসুন জাভা 8 এবং তার পরে নির্মিত জাভা.টাইম ফ্রেমওয়ার্ক ব্যবহার করে কোডটি দেখিয়ে এই পৃষ্ঠাটি আপডেট করুন ।

এই নতুন ক্লাসগুলি জোডা-টাইম দ্বারা অনুপ্রাণিত হয়েছে , জেএসআর 310 দ্বারা সংজ্ঞায়িত হয়েছে এবং থ্রিটেন-এক্সট্রা প্রকল্প দ্বারা বর্ধিত হয়েছে । তারা জাভার প্রাথমিক সংস্করণগুলির সাথে বান্ডিল করা কুখ্যাত সমস্যাযুক্ত পুরানো তারিখের সময় ক্লাসগুলিকে সাপ্লান্ট করে।

জাভা.টাইমে, Instantইউটিসিতে সময়রেখার একটি মুহুর্ত। এ ZonedDateTimeহ'ল একটি তাত্ক্ষণিক সময় অঞ্চল ( ZoneId) এ সামঞ্জস্য ।

সময় অঞ্চল এখানে গুরুত্বপূর্ণ। একটি তারিখ September 23, 2007সময় অঞ্চল প্রয়োগ না করে টাইমলাইনে একটি মুহুর্তে অনুবাদ করা যায় না। বিবেচনা করুন যে মন্ট্রিয়ালের তুলনায় একটি নতুন দিন প্যারিসে প্রথম দিকে উদিত হয়েছিল যেখানে এখনও এটি "গতকাল" রয়েছে।

এছাড়াও, একটি java.sql.Timestamp উভয় তারিখ এবং দিনের সময় উভয় উপস্থাপন করে। সুতরাং আমাদের অবশ্যই তারিখটি বজায় রাখতে একটি সময়কালীন ইনজেকশন করতে হবে। আমরা ধরে নিই যে আপনি দিনের প্রথম মুহূর্তটি দিনের সময় হিসাবে চান। নোট করুন যে 00:00:00.0ডাইটলাইট সেভিং টাইম এবং সম্ভবত অন্যান্য অসঙ্গতির কারণে এটি সর্বদা সময় নয় ।

নোট করুন যে পুরানো java.util.Date ক্লাসের বিপরীতে এবং জোদা-টাইমের বিপরীতে, জাভা.টাইম টাইপগুলির মিলি সেকেন্ডের চেয়ে ন্যানোসেকেন্ডগুলির রেজোলিউশন রয়েছে। এটি java.sql.Timestamp এর রেজোলিউশনের সাথে মেলে।

নোট করুন যে java.sql.Timestamp এর toStringপদ্ধতিটির মাধ্যমে স্ট্রিং প্রতিনিধিত্ব করার সময় আপনার JVM- র বর্তমান ডিফল্ট সময় অঞ্চলটিকে তার তারিখ-সময় মানকে স্পষ্টভাবে প্রয়োগ করার একটি অভ্যাসযুক্ত অভ্যাস রয়েছে । এখানে আপনি আমার America/Los_Angelesসময় অঞ্চল প্রয়োগ আছে দেখুন। বিপরীতে, জাভা.টাইম ক্লাসগুলি বেশি বুদ্ধিমান, স্ট্যান্ডার্ড আইএসও 8601 ফর্ম্যাট ব্যবহার করে।

LocalDate d = LocalDate.of ( 2007 , 9 , 23 ) ;
ZoneId z = ZoneId.of ( "America/Montreal" ) ;
ZonedDateTime zdt = d.atStartOfDay( z ) ;
Instant instant = zdt.toInstant() ;
java.sql.Timestamp ts = java.sql.Timestamp.from ( instant ) ;

কনসোল করতে ডাম্প।

System.out.println ( "d: " + d + " = zdt: " + zdt + " = instant: " + instant + " = ts: " + ts );

যখন রান।

d: 2007-09-23 = zdt: 2007-09-23T00: 00-04: 00 [আমেরিকা / মন্ট্রিল] = তাত্ক্ষণিক: 2007-09-23T04: 00: 00Z = টিএস: 2007-09-22 21:00: 00.0

যাইহোক, জেডিবিসি ৪.২ হিসাবে, আপনি java.Time প্রকারগুলি সরাসরি ব্যবহার করতে পারেন। দরকার নেই java.sql.Timestamp

  • PreparedStatement.setObject
  • ResultSet.getObject

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

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

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

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

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

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

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


4
আমি ভাবছি যে আমি কীভাবে আপনার উত্তরটিকে সঠিক হিসাবে চিহ্নিত করতে ওপি বা মোডগুলি পেতে পারি। গৃহীত উত্তর তাই পুরানো।
sttaq

টাইপো বাদে খুব সুন্দর। asStartOfDay () atStartOfDay () হওয়া উচিত।
Tullochgorum

নিবন্ধন করুন ধন্যবাদ এফওয়াইআই, স্ট্যাক ওভারফ্লোতে, আপনি যদি খুব ঝোঁক থাকেন তবে আপনাকে এই জাতীয় সম্পাদনাগুলি নিজেই করতে স্বাগত জানাই।
বেসিল Bourque

5

আপনি নিম্নলিখিতগুলি করতে পারেন:

// untested
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 23);// I might have the wrong Calendar constant...
cal.set(Calendar.MONTH, 8);// -1 as month is zero-based
cal.set(Calendar.YEAR, 2009);
Timestamp tstamp = new Timestamp(cal.getTimeInMillis());

4
ভুল: ফলাফলের একটি System.out.println ব্যবহার করে দেখুন! আপনি এর মতো কিছু পাবেন: "2009-10-23 15: 26: 56.171" মাস 0-ভিত্তিক তাই 9 ই অক্টোবর!
ব্যবহারকারী 85421

আমি জানতাম those ধ্রুবকগুলির মধ্যে একটি শূন্য-ভিত্তিক, ধন্যবাদ। পোস্ট আপডেট হয়েছে।
অ্যালেক্স

4
ওহ, এবং আমি 'অপেশিত' রেখেছি :)
অ্যালেক্স

4

এপিআই অনুসারে কনস্ট্রাক্টর যা বছর, মাস এবং আরও অনেক কিছু গ্রহণ করবে তা হ্রাস করা হয়েছে। পরিবর্তে আপনার কনস্ট্রাক্টর ব্যবহার করা উচিত যা একটি দীর্ঘ গ্রহণ করে। আপনি যে তারিখটি চান তা তৈরি করতে এবং একটি দীর্ঘ হিসাবে সময়-উপস্থাপনা অ্যাক্সেস করতে একটি ক্যালেন্ডার বাস্তবায়ন ব্যবহার করতে পারেন , উদাহরণস্বরূপ getTimeInMillis পদ্ধতিতে।


1

সম্পূর্ণতার জন্য, জোদা-টাইম সংস্করণ 2.5 এবং এর DateTimeক্লাস সহ একটি সমাধান :

new Timestamp(new DateTime(2007, 9, 23, 0, 0, DateTimeZone.forID( "America/Montreal" )).getMillis())

4
উত্তম উত্তর, তবে আপনি একটি অত্যন্ত গুরুত্বপূর্ণ অংশটি মিস করেছেন : সময় অঞ্চল । আপনি যদি কোনও সময় অঞ্চল বাদ দেন, JVM- র বর্তমান ডিফল্ট সময় অঞ্চলটি DateTimeবস্তুটিতে প্রয়োগ করা হবে । তার মানে আপনার ফলাফলগুলি পৃথক হবে বিভিন্ন কম্পিউটার বা হোস্ট ওএস বা জেভিএম সেটিংসের কনফিগারেশনে । পূর্বাভাসযোগ্য ফলাফলের জন্য, সেই নির্মাতার কাছে একটি সময় অঞ্চল পাস করুন DateTime। আপনার অভিপ্রায় জন্য যথাযথ সময় অঞ্চল নাম চয়ন করুন । উদাহরণস্বরূপ, DateTimeZone.forID( "America/Montreal" )বা DateTimeZone.UTC
তুলিল বাউরক

এই কোডটি ব্রিফার হতে পারে। পেতে এবং মিলিসেকেন্ড-since- পাস ধর্মান্তরিত java.util.Date করার করার কোন প্রয়োজন নেই যুগান্তকারীDateTimeপর্বের সময় থেকে অবধি কেবল মিলিসেকেন্ডের জন্য জিজ্ঞাসা করুন । .toDate().getTime()সঙ্গে প্রতিস্থাপন .getMillis()
তুলিল বাউরক

@ বাসিলবার্ক পরিস্থিতিগুলির উপর নির্ভর করে আপনি অনুমানযোগ্য ফলাফল পেতে সময় অঞ্চল ছেড়ে যেতে চাইতে পারেন। "আপনার বর্তমান টাইমজোন" একটি নিখুঁত যুক্তিসঙ্গত এবং অনুমানযোগ্য ফলাফল হতে পারে। হার্ডকোড কেন একটি টাইমজোন, বা ব্যবহারকারীদের কম্পিউটারে ইতিমধ্যে টাইমজোন সেট থাকা অবস্থায় ম্যানুয়ালি একটি টাইমজোন সেট করতে বলুন? অবশ্যই আমার কম্পিউটারে কোনও অ্যাপ্লিকেশন আমেরিকা / মন্ট্রিয়ালের টাইমজোন থেকে সামঞ্জস্য হওয়ার তারিখগুলি আউটপুট করা শুরু করলে অবশ্যই আমি অবাক হব।
ড্যান কার্টার

@ এডানকার্টার timeচ্ছিক সময় অঞ্চল ছেড়ে দেওয়া বিভ্রান্তির দিকে নিয়ে যায়। বাদ দেওয়ার ফলে (ক) প্রোগ্রামার অন্তর্নিহিত ডিফল্টের উপর নির্ভর করতে চায় বা (খ) প্রোগ্রামার সময় অঞ্চল সংক্রান্ত সমস্যাগুলি বিবেচনা করতে ব্যর্থ হয়েছিল (যেমনটি খুব সাধারণ) is আপনি যদি সত্যিই JVM- র বর্তমান ডিফল্ট সময় অঞ্চলটি ব্যবহার করতে চান, calling DateTimeZone.getDefault()চ্ছিক যুক্তি হিসাবে ফলাফলটি কল করে এবং পাস করে সুস্পষ্টভাবে বলুন । (উপায় দ্বারা, optionচ্ছিক Locale.getDefault()আর্গুমেন্টের অস্পষ্টতার বিষয়ে একই বিষয়।)
বাসিল বাউর্কের

-1

আরও সাধারণ উত্তরটি আমদানি করা হবে java.util.Date, তারপরে আপনার যখন timestampবর্তমান তারিখের সমান সেট করা দরকার তখন কেবল এটির সমান সেট করুন new Date()


কারণ ** তারিখ ("স্ট্রিং"); ** অবচয় করা হয়েছে
আশীষ রতন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.