জাভাতে বর্তমান মুহুর্তের বছর, মাস, দিন, ঘন্টা, মিনিট, সেকেন্ড এবং মিলিসেকেন্ডগুলি কীভাবে পাবেন?


104

আমি জাভাতে বর্তমান মুহুর্তের বছর, মাস, দিন, ঘন্টা, মিনিট, সেকেন্ড এবং মিলিসেকেন্ডগুলি কীভাবে পেতে পারি? আমি তাদের মতো করে রাখতে চাই Strings

উত্তর:


254

আপনি এর java.time.LocalDateTimeজন্য getters ব্যবহার করতে পারেন ।

LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
int millis = now.get(ChronoField.MILLI_OF_SECOND); // Note: no direct getter available.

System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);

বা, আপনি যখন জাভা 8 এ নেই, তখন ব্যবহার করুন java.util.Calendar

Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1; // Note: zero based!
int day = now.get(Calendar.DAY_OF_MONTH);
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
int millis = now.get(Calendar.MILLISECOND);

System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);

যেভাবেই হোক, এই হিসাবে এখন পর্যন্ত মুদ্রণ:

2010-04-16 15: 15: 17.816

এটিকে রূপান্তর intকরতে String, ব্যবহার করুন String#valueOf()


যদি আপনার অভিপ্রায়টি সর্বোপরি মানব বান্ধব স্ট্রিং বিন্যাসে সেগুলি সাজানোর এবং প্রদর্শন করার জন্য হয় তবে জাভা 8 এর java.time.format.DateTimeFormatter( টিউটোরিয়ালটি এখানে ) আরও ভাল ব্যবহার করুন ,

LocalDateTime now = LocalDateTime.now();
String format1 = now.format(DateTimeFormatter.ISO_DATE_TIME);
String format2 = now.atZone(ZoneId.of("GMT")).format(DateTimeFormatter.RFC_1123_DATE_TIME);
String format3 = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss", Locale.ENGLISH));

System.out.println(format1);
System.out.println(format2);
System.out.println(format3);

বা যখন আপনি এখনও জাভা 8 এ নেই, ব্যবহার করুন java.text.SimpleDateFormat:

Date now = new Date(); // java.util.Date, NOT java.sql.Date or java.sql.Timestamp!
String format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(now);
String format2 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH).format(now);
String format3 = new SimpleDateFormat("yyyyMMddHHmmss", Locale.ENGLISH).format(now);

System.out.println(format1);
System.out.println(format2);
System.out.println(format3);

যেভাবেই হোক, এই ফলন:

2010-04-16T15: 15: 17,816
শুক্র, 16 এপ্রিল 2010 15:15:17 GMT
20100416151517

আরো দেখুন:


আপনি যদি প্রিন্টফ ব্যবহার করতে যাচ্ছেন তবে মধ্যবর্তী পদক্ষেপের অর্থ "% 1 $ tm% 1 $ te,% 1 $ tY", c ব্যবহার করার পরিবর্তে আপনি কেবল ডেট / টাইমসের জন্য ফর্ম্যাটগুলি ব্যবহার করতে পারেন (জাভা.ইটিল দেখুন। সম্পূর্ণ সিনট্যাক্সের ফরমেটার)
এম। জেসুপ

1
@M। জেসাপ: আসলেই খুব সুন্দর। আমি তবে এটি কখনও ব্যবহার করি নি, তাই আমি এটি শীর্ষে থেকে প্রবেশ করতে পারিনি, উপরেরটি কেবলমাত্র ডেমো উদ্দেশ্যে for নির্বিশেষে, আমি বরং দখল করব SimpleDateFormatবা DateTimeFormatterসেই বিশেষ কাজের জন্য করব :)
বালাসক

আমি জোদা-সময় ব্যবহার করার জন্য দৃ .়তার সাথে পরামর্শ দেব, যেহেতু জাভা সরাসরি অফার করে এমন খারাপভাবে ডিজাইন করা তারিখ এবং ক্যালেন্ডারগুলির তুলনায় এর খুব সুন্দর এবং বোধগম্য এপিআই।
কৈসসু

আমি এটিকে পছন্দ করি, বিশেষত স্টার্টটাইম বা এন্ডটাইম পেতে আই 18 টি কাজে:new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).format(new Date());
এডি

1
জাভা.টাইম কার্যকারিতাটির বেশিরভাগ থ্রিটেন-ব্যাকপোর্ট প্রকল্পে জাভা 6 এবং 7 এ ব্যাকপোর্ট করা হয়
বেসিল বাউরক

30

জোদা-সময়ে স্যুইচ করুন এবং আপনি এটি তিনটি লাইনে করতে পারেন

DateTime jodaTime = new DateTime();

DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS");
System.out.println("jodaTime = " + formatter.print(jodaTime));

আপনারও কোনও ক্যালেন্ডার ব্যবহার না করেই তারিখের পৃথক ক্ষেত্রগুলিতে সরাসরি অ্যাক্সেস রয়েছে।

System.out.println("year = " + jodaTime.getYear());
System.out.println("month = " + jodaTime.getMonthOfYear());
System.out.println("day = " + jodaTime.getDayOfMonth());
System.out.println("hour = " + jodaTime.getHourOfDay());
System.out.println("minute = " + jodaTime.getMinuteOfHour());
System.out.println("second = " + jodaTime.getSecondOfMinute());
System.out.println("millis = " + jodaTime.getMillisOfSecond());

আউটপুট নিম্নরূপ:

jodaTime = 2010-04-16 18:09:26.060

year = 2010
month = 4
day = 16
hour = 18
minute = 9
second = 26
millis = 60

Http://www.joda.org/joda-time/ অনুসারে

জোডা-টাইম জাভা-র জন্য ডিস্টিক স্ট্যান্ডার্ড তারিখ এবং সময় গ্রন্থাগার। জাভা এসই 8 থেকে, ব্যবহারকারীদের জাভা.টাইম (জেএসআর -310) এ মাইগ্রেট করতে বলা হয়।


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

7
    // Java 8
    System.out.println(LocalDateTime.now().getYear());       // 2015
    System.out.println(LocalDateTime.now().getMonth());      // SEPTEMBER
    System.out.println(LocalDateTime.now().getDayOfMonth()); // 29
    System.out.println(LocalDateTime.now().getHour());       // 7
    System.out.println(LocalDateTime.now().getMinute());     // 36
    System.out.println(LocalDateTime.now().getSecond());     // 51
    System.out.println(LocalDateTime.now().get(ChronoField.MILLI_OF_SECOND)); // 100

    // Calendar
    System.out.println(Calendar.getInstance().get(Calendar.YEAR));         // 2015
    System.out.println(Calendar.getInstance().get(Calendar.MONTH ) + 1);   // 9
    System.out.println(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); // 29
    System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY));  // 7
    System.out.println(Calendar.getInstance().get(Calendar.MINUTE));       // 35
    System.out.println(Calendar.getInstance().get(Calendar.SECOND));       // 32
    System.out.println(Calendar.getInstance().get(Calendar.MILLISECOND));  // 481

    // Joda Time
    System.out.println(new DateTime().getYear());           // 2015
    System.out.println(new DateTime().getMonthOfYear());    // 9
    System.out.println(new DateTime().getDayOfMonth());     // 29
    System.out.println(new DateTime().getHourOfDay());      // 7
    System.out.println(new DateTime().getMinuteOfHour());   // 19
    System.out.println(new DateTime().getSecondOfMinute()); // 16
    System.out.println(new DateTime().getMillisOfSecond()); // 174

    // Formatted
    // 2015-09-28 17:50:25.756
    System.out.println(new Timestamp(System.currentTimeMillis()));

    // 2015-09-28T17:50:25.772
    System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(new Date()));

    // Java 8
    // 2015-09-28T17:50:25.810
    System.out.println(LocalDateTime.now());

    // joda time
    // 2015-09-28 17:50:25.839
    System.out.println(DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS").print(new org.joda.time.DateTime()));

এই উত্তরটি সত্যই সেই প্রশ্নটিকে সম্বোধন করে, যা একটি তারিখ-সময় মানের উপাদানগুলি অ্যাক্সেস করার বিষয়ে জিজ্ঞাসা করেছিল (সাধারণ বিন্যাসিত স্ট্রিং নয়)।
তুলসী বাউরক

6

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

ZonedDateTime.now().getYear();
ZonedDateTime.now().getMonthValue();
ZonedDateTime.now().getDayOfMonth();
ZonedDateTime.now().getHour();
ZonedDateTime.now().getMinute();
ZonedDateTime.now().getSecond();

ZonedDateTime.now()ডিফল্ট সময়-অঞ্চলে সিস্টেম ঘড়ি থেকে বর্তমান তারিখ-সময়টি ফিরিয়ে দেওয়া একটি স্থিতিশীল পদ্ধতি। সমস্ত প্রাপ্ত পদ্ধতিগুলি একটি intমান দেয়।


LocalDateTimeঅবশ্যই এই জন্য ভুল বর্গ। সময় অঞ্চল বা অফসেট-ইউটিসি থেকে তার কোনো ধারণা উদাসীন না পারেন, একটি নির্দিষ্ট মুহূর্ত ট্র্যাক করতে ব্যবহার করা যেতে, এটা না টাইমলাইনে একটি বিন্দু। ব্যবহার করুন Instant, ZonedDateTimeবা OffsetDateTimeপরিবর্তে।
বাসিল বাউরক

তুমি ঠিক বলছো. আমি আমার উত্তরটি ব্যবহার করার জন্য পরিবর্তন করেছি ZonedDateTime
অরটোমালা লোকনি

3

TL; ড

ZonedDateTime.now(                    // Capture current moment as seen in the wall-clock time used by the people of a particular region (a time zone).
    ZoneId.of( "America/Montreal" )   // Specify desired/expected time zone. Or pass `ZoneId.systemDefault` for the JVM’s current default time zone.
)                                     // Returns a `ZonedDateTime` object.
.getMinute()                          // Extract the minute of the hour of the time-of-day from the `ZonedDateTime` object.

42

ZonedDateTime

কোনও নির্দিষ্ট অঞ্চলের (একটি অঞ্চল অঞ্চল) লোকেরা ব্যবহৃত প্রাচীর-ঘড়ির সময় হিসাবে দেখা বর্তমান মুহুর্তটি ক্যাপচার করতে, ব্যবহার করুন ZonedDateTime

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

যদি কোনও সময় অঞ্চল নির্দিষ্ট না করা থাকে, JVM সুস্পষ্টভাবে তার বর্তমান ডিফল্ট সময় অঞ্চলটি প্রয়োগ করে। রানটাইম (!) এর সময় যে কোনও মুহুর্তে ডিফল্টটি পরিবর্তিত হতে পারে, সুতরাং আপনার ফলাফলগুলি পৃথক হতে পারে। আর্গুমেন্ট হিসাবে আপনার কাঙ্ক্ষিত / প্রত্যাশিত সময় অঞ্চলটি স্পষ্টভাবে উল্লেখ করা ভাল ।

একটি নির্দিষ্ট করুন সঠিক সময় অঞ্চল নাম এর বিন্যাসে continent/regionযেমন America/Montreal, Africa/Casablancaঅথবা Pacific/Auckland। কখনও যেমন 3-4 চিঠি সংক্ষেপ ব্যবহার ESTবা ISTহিসাবে তারা না সত্য সময় অঞ্চল, না মান, এবং এমনকি অনন্য নয় (!)।

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

তারিখ-সময়ের টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টানতে।

int    year        = zdt.getYear() ;
int    monthNumber = zdt.getMonthValue() ;
String monthName   = zdt.getMonth().getDisplayName( TextStyle.FULL , Locale.JAPAN ) ;  // Locale determines human language and cultural norms used in localizing. Note that `Locale` has *nothing* to do with time zone.
int    dayOfMonth  = zdt.getDayOfMonth() ;
String dayOfWeek   = zdt.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ; 
int    hour        = zdt.getHour() ;  // Extract the hour from the time-of-day.
int    minute      = zdt.getMinute() ;
int    second      = zdt.getSecond() ;
int    nano        = zdt.getNano() ;

Java.time ক্লাস সমাধান ন্যানোসেকেন্ড । আপনার প্রশ্নটি এক সেকেন্ডের ভগ্নাংশটি মিলি সেকেন্ডের জন্য জিজ্ঞাসা করেছিল । স্পষ্টতই, আপনি সম্ভাব্য ডেটা ক্ষতিতে ব্যয় করে ন্যানোসেকেন্ডগুলিকে মিলিসেকেন্ডে ছাঁটাই করতে দশ মিলিয়ন দিয়ে ভাগ করতে পারেন। অথবা এ TimeUnitজাতীয় রূপান্তরকরণের জন্য এনাম ব্যবহার করুন ।

long millis = TimeUnit.NANOSECONDS.toMillis( zdt.getNano() ) ;

DateTimeFormatter

Stringপাঠ্যের টুকরো একত্রিত করতে একটি উত্পাদন করতে, DateTimeFormatterশ্রেণিটি ব্যবহার করুন । এ সম্পর্কিত আরও তথ্যের জন্য অনুসন্ধান স্ট্যাক ওভারফ্লো।

Instant

সাধারণত ইউটিসিতে মুহুর্তগুলি সন্ধান করা সেরা। একটি জোনেড তারিখ-সময় থেকে ইউটিসিতে সমন্বয় করতে, এটিকে বের করুন Instant

Instant instant = zdt.toInstant() ;

এবং আবার ফিরে যান।

ZonedDateTime zdt = instant.atZone( ZoneId.of( "Africa/Tunis" ) ) ;

LocalDateTime

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

তাহলে কি জন্য LocalDateTimeভাল? LocalDateTimeআপনি যখন কোনও নির্দিষ্ট লোকেশনের পরিবর্তে কোনও লোকেশন বা সমস্ত অঞ্চলে তারিখ ও সময় প্রয়োগ করার পরিকল্পনা করেন তখন ব্যবহার করুন ।

উদাহরণস্বরূপ, এই বছর ক্রিসমাস শুরু হয় LocalDateTime.parse( "2018-12-25T00:00:00" )। যতক্ষণ না আপনি একটি সময় অঞ্চল (ক ZoneId) প্রয়োগ করার জন্য এই মানটির কোনও অর্থ হয় না ZonedDateTime। ক্রিসমাস প্রথম কিরিবতীতে হয় , তারপরে নিউজিল্যান্ড এবং সুদূর পূর্ব এশিয়ায় হয়। কয়েক ঘন্টা পরে ভারতে ক্রিসমাস শুরু হয়। আরও ঘন্টা পরে আফ্রিকা ও ইউরোপে। এবং এখনও আমেরিকাতে ক্রিসমাস না কয়েক ঘন্টা পরে। যে কোনও এক জায়গায় শুরু হওয়া ক্রিসমাসের সাথে প্রতিনিধিত্ব করা উচিত ZonedDateTime। ক্রিসমাস সর্বত্র একটি সঙ্গে প্রতিনিধিত্ব করা হয় LocalDateTime


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

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

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

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

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

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


2

অথবা java.sql.Timestamp ব্যবহার করুন। ক্যালেন্ডার খুব ভারী, আমি এটি উত্পাদন কোড ব্যবহার করার বিরুদ্ধে সুপারিশ করব। জোদা আরও ভাল।

import java.sql.Timestamp;

public class DateTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(new Timestamp(System.currentTimeMillis()));
    }
}

আমি মনে করি আপনি স্কেল টাইমস্ট্যাম্পের প্রশ্ন এবং ব্যবহার উভয়ই ভুল বুঝেছেন। আপনি সাধারণত new Date()এখানে ব্যবহার করবেন । তবে অনুরোধ অনুসারে আপনি কীভাবে সহজেই এর থেকে পৃথক অংশ পাবেন?
বালুসসি

এফওয়াইআই, জেডিবিসি ৪.২ এর আগমনের java.sql.Timestampমাধ্যমে java.time.Instantপরিবেশন করা হয়েছিল।
বাসিল বার্ক

0

জাভাতে 7 ক্যালেন্ডার এক লাইনে

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(Calendar.getInstance().getTime())

1
সমস্যাযুক্ত ক্যালেন্ডার এবং সিম্পলডেটফর্ম্যাট ক্লাসগুলি এখন পুরানো, পুরোপুরি জাভা.টাইম ক্লাস দ্বারা বিভক্ত। আধুনিক পদ্ধতির জন্য বালুসকের উত্তর দেখুন । জাভা.টাইম কার্যকারিতাটির বেশিরভাগ থ্রিটেন-ব্যাকপোর্ট প্রকল্পে জাভা 6 এবং 7 এ ব্যাকপোর্ট করা হয়
বেসিল বাউরক

-2

জাভা.ইটিল.ক্যালেন্ডার শ্রেণি এবং এর ডেরাইভেটিভগুলির জন্য API ডকুমেন্টেশন দেখুন (আপনি গ্রেগরিয়ানক্যালেন্ডার শ্রেণিতে বিশেষভাবে আগ্রহী হতে পারেন)।


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

-2

ক্যালেন্ডার এখন = নতুন ক্যালেন্ডার () // বা নতুন গ্রেগরিয়ানক্যালেন্ডার (), বা যা প্রয়োজন আপনার স্বাদে

এখন.মনি এখন

প্রভৃতি


3
হাই, আপনি কেন ইতিমধ্যে একটি জবাব দুর্বল উপায়ে পুনরাবৃত্তি করছেন তা বোঝার জন্য আমার খুব কষ্ট হয়েছে। দয়া করে বিশদ করুন :)
BalusC

3
MONTHএবং উদাহরণ বৈশিষ্ট্য নয়, HOURস্থির ধ্রুবক হয় Calendar
জোসেফ আর্ল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.