জাভাতে একটি তারিখে n ঘন্টা যুক্ত করা হচ্ছে?


136

আমি কীভাবে একটি ডেট অবজেক্টে n ঘন্টা যুক্ত করব? আমি স্ট্যাকওভারফ্লোতে দিনগুলি ব্যবহার করে অন্য একটি উদাহরণ পেয়েছি, তবে কীভাবে ঘন্টা সহকারে এটি করা যায় তা এখনও বুঝতে পারি না।


3
সম্ভব হলে জোডাটাইম.সোর্সফোর্জন.নেট ব্যবহার করুন ।
বাবর

3
সম্ভব হলে জাভা 8 তারিখ এবং সময় ব্যবহার করুন ।
পিস্পেস করুন

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

উত্তর:


210

ক্যালেন্ডার ক্লাস চেক করুন। addসময়ের কারসাজির অনুমতি দেওয়ার জন্য এর পদ্ধতি (এবং কিছু অন্যান্য) রয়েছে। এর মতো কিছু কাজ করা উচিত।

    Calendar cal = Calendar.getInstance(); // creates calendar
    cal.setTime(new Date()); // sets calendar time/date
    cal.add(Calendar.HOUR_OF_DAY, 1); // adds one hour
    cal.getTime(); // returns new date object, one hour in the future

পরীক্ষা করে দেখুন এপিআই আরো অনেক কিছুর জন্য।


4
আপনি যদি দিবালোকের সঞ্চয় / গ্রীষ্মের সময় নিয়ে কাজ করেন তবে কেবল সতর্ক হন be
কার্টেনডগ

5
আপনি "নেতিবাচক ঘন্টা" যোগ করতে পারেন তা উল্লেখ করার দরকার নেই
pramodc84

6
@ কার্টেনডগ ইউজিং Calendar.add()স্বয়ংক্রিয়ভাবে সেটির যত্ন নেয়।
জেস্পার

6
ক্যালসেটটাইম (নতুন তারিখ ()) প্রয়োজন নেই - ক্যালেন্ডার.জেট ইনস্ট্যান্স () এর জাভাদোক বলেছেন: "ফিরে আসা ক্যালেন্ডারটি ডিফল্ট লোকালের সাথে ডিফল্ট টাইম জোনে বর্তমান সময়ের উপর ভিত্তি করে তৈরি করা হয়েছে।"
mithrandir

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

82

আপনি যদি অ্যাপাচি কমন্স / ল্যাং ব্যবহার করেন তবে আপনি এটি ব্যবহার করে এক ধাপে এটি করতে পারেন DateUtils.addHours():

Date newDate = DateUtils.addHours(oldDate, 3);

(মূল বস্তুটি অপরিবর্তিত)


3
এছাড়াও আপনি negativ ঘন্টা ব্যবহার করতে পারেন:DateUtils.addHours(oldDate, -1);
Kaptain

পর্দার আড়ালে, নিকিতার উত্তর ঠিক যা করে তা এটি করে তবে এটি খুব সহজ এবং সহজেই পড়া যায়। এছাড়াও, যদি আপনি ইতিমধ্যে অ্যাপাচি কমন্স / ল্যাং ব্যবহার করেন ... তবে কেন নয়?
ম্যাট

28

@ ক্রিস্টোফারের উদাহরণকে সরল করার জন্য।

বলুন আপনার একটি ধ্রুবক আছে

public static final long HOUR = 3600*1000; // in milli-seconds.

তুমি লিখতে পারো.

Date newDate = new Date(oldDate.getTime() + 2 * HOUR);

আপনি যদি তারিখ অবজেক্টের পরিবর্তে তারিখ / সময় সংরক্ষণ করতে দীর্ঘ ব্যবহার করেন তবে আপনি করতে পারেন

long newDate = oldDate + 2 * HOUR;

26

TL; ড

myJavaUtilDate.toInstant()
              .plusHours( 8 )

অথবা ...

myJavaUtilDate.toInstant()                // Convert from legacy class to modern class, an `Instant`, a point on the timeline in UTC with resolution of nanoseconds.
              .plus(                      // Do the math, adding a span of time to our moment, our `Instant`. 
                  Duration.ofHours( 8 )   // Specify a span of time unattached to the timeline.
               )                          // Returns another `Instant`. Using immutable objects creates a new instance while leaving the original intact.

জাভা.টাইম ব্যবহার

জাভা.টাইম ফ্রেমওয়ার্কটি জাভা 8 এ নির্মিত এবং পরে পুরাতন জাভা.ইটি.এল.ডেট /.ক্যালেন্ডার ক্লাসগুলি সরবরাহ করে। সেই পুরানো ক্লাসগুলি কুখ্যাত সমস্যাযুক্ত। এগুলি এড়িয়ে চলুন।

toInstantপুরানো টাইপ থেকে নতুন জাভা.টাইম টাইপে রূপান্তর করতে java.util.Date- এ নতুনভাবে যুক্ত পদ্ধতিটি ব্যবহার করুন । একটি Instantসময় লাইনে একটি মুহূর্ত ইউটিসি একটি রেজোলিউশনে ন্যানোসেকেন্ড

Instant instant = myUtilDate.toInstant();

আপনি যেমন Instantপাস করে ঘন্টা ঘন্টা যোগ করতে পারেন ।TemporalAmountDuration

Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );

সেই তারিখ-সময়টি পড়তে, কল করে স্ট্যান্ডার্ড আইএসও 8601 ফর্ম্যাটে একটি স্ট্রিং তৈরি করুন toString

String output = instantHourLater.toString();

আপনি কোনও মুহূর্তটি কোনও অঞ্চলের প্রাচীর-ঘড়ির সময় লেন্সের মাধ্যমে দেখতে চাইতে পারেন । Instantএকটি তৈরি করে আপনার পছন্দসই / প্রত্যাশিত সময় অঞ্চলে সামঞ্জস্য করুন ZonedDateTime

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

বিকল্পভাবে, আপনি plusHoursআপনার ঘন্টা গণনা যোগ করতে কল করতে পারেন। জোনেড হওয়ার অর্থ ডাইটলাইট সেভিং টাইম (ডিএসটি) এবং অন্যান্য অসঙ্গতিগুলি আপনার পক্ষে পরিচালিত হবে।

ZonedDateTime later = zdt.plusHours( 8 );

আপনি সহ পুরাতন তারিখ-সময় শ্রেণীর ব্যবহার এড়িয়ে চলা উচিত java.util.Dateএবং .Calendar। তবে আপনার যদি java.util.Dateজাভা.টাইম টাইপের জন্য এখনও আপডেট হয়নি এমন ক্লাসগুলির সাথে আন্তঃব্যবহারের জন্য সত্যিকারের প্রয়োজন হয় তবে সেখান থেকে রূপান্তর ZonedDateTimeকরুন Instant। পুরানো ক্লাসে যুক্ত নতুন পদ্ধতিগুলি জাভা.টাইম টাইপগুলিতে / থেকে রূপান্তরকে সহায়তা করে।

java.util.Date date = java.util.Date.from( later.toInstant() );

রূপান্তরকরণ সম্পর্কে আরও আলোচনার জন্য, প্রশ্নের উত্তরটি আমার দেখুন , java.util রূপান্তর করুন ate "জাভা.টাইম" টাইপটি কী তারিখে?


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

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

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

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

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

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

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


23

জোদা-সময় সহ With

DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);

2
এটির জন্য কিছুটা অপ্রয়োজনীয়, তবে আপনি যদি আরও তারিখের ম্যানিপুলেশন করতে যাচ্ছেন তবে জোড়ার সময় একটি দুর্দান্ত গ্রন্থাগার
হেন্ড্রিকেক্স ২

3
@ জোয়ারি হ্যান্ড্রিক্স যদি প্রোগ্রামার কোনও তারিখে ঘন্টা যোগ করে তবে খুব সম্ভবত তারা অন্যান্য তারিখ-সময় কাজ করছে doing আমি জোদা-সময়কে একেবারেই অপ্রয়োজনীয় মনে করি না ; যে কোনও নতুন প্রকল্প স্থাপনের সময় আমি প্রথমে যা করি তা হ'ল জোদা-সময়। এমনকি সান এবং ওরাকল সম্মত হয়েছিলেন যে পুরানো java.util. তারিখ এবং ক্যালেন্ডারটি পর্যায়ক্রমে করা দরকার, তাই তারা জাভা 8- তে নতুন java.Time। * প্যাকেজটি (জোদা-সময় দ্বারা অনুপ্রাণিত) জাভা 8-তে যুক্ত করেছে
বাসিল বার্ক

অ্যান্ড্রয়েডে জোদার সাথে আমার সমস্যা হয়েছিল। রাখা হয়েছেClassNotDefinedException
TheRealChx101

23

জাভা 8:

LocalDateTime.now().minusHours(1);

LocalDateTimeএপিআই দেখুন ।


4
বন্ধ কিন্তু বেশ সঠিক নয়। আপনার ZonedDateTimeপরিবর্তে একটি পরিবর্তে যাওয়া উচিত LocalDateTime। "স্থানীয়" মানে না কোন বিশেষ এলাকার বাঁধা, এবং না টাইমলাইনে বাঁধা। "ক্রিসমাস 25 ডিসেম্বর, 2015 এর মধ্যরাতে শুরু হয়" এর মতো বিভিন্ন সময় অঞ্চল জুড়ে একটি আলাদা মুহূর্ত, সময়রেখায় একটি নির্দিষ্ট মুহূর্ত পাওয়ার জন্য আপনি কোনও নির্দিষ্ট সময় অঞ্চল প্রয়োগ না করা পর্যন্ত কোনও অর্থ নেই। তদ্ব্যতীত, কোনও সময় অঞ্চল ছাড়া দিবালোক সংরক্ষণের সময় (ডিএসটি) এবং অন্যান্য ব্যতিক্রমগুলি লোকালডেটটাইমের ব্যবহারের সাথে পরিচালিত হবে না। তুলনা করে আমার উত্তর দেখুন ।
তুলসী বাউরক

1
এছাড়াও একটি পেতে java.util.Dateঅবজেক্ট হিসেবে অনুরোধকারীকে আমাদের জিজ্ঞাসা ছিল ZonedDateTime.toInstant()এবং Date.from()যেমন এখানে বর্ণিত stackoverflow.com/a/32274725/5661065
hayduke

16

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

    Date oldDate = new Date(); // oldDate == current time
    Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours

14

কিছুটা এইরকম:

Date oldDate = new Date(); // oldDate == current time
final long hoursInMillis = 60L * 60L * 1000L;
Date newDate = new Date(oldDate().getTime() + 
                        (2L * hoursInMillis)); // Adds 2 hours

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

7

আপনার কোডটি Dateটাইমটাইম ফর্ম্যাটে থাকা অবস্থায় এটি কোডের অন্য অংশ piece এই কোডটির সৌন্দর্য হ'ল, যদি আপনি আরও বেশি ঘন্টা দেন তবে তারিখটিও সেই অনুযায়ী আপডেট হবে।

    String myString =  "09:00 12/12/2014";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy");
    Date myDateTime = null;

    //Parse your string to SimpleDateFormat
    try
      {
        myDateTime = simpleDateFormat.parse(myString);
      }
    catch (ParseException e)
      {
         e.printStackTrace();
      }
    System.out.println("This is the Actual Date:"+myDateTime);
    Calendar cal = new GregorianCalendar();
    cal.setTime(myDateTime);

    //Adding 21 Hours to your Date
    cal.add(Calendar.HOUR_OF_DAY, 21);
    System.out.println("This is Hours Added Date:"+cal.getTime());

এখানে আউটপুট:

    This is the Actual Date:Fri Dec 12 09:00:00 EST 2014
    This is Hours Added Date:Sat Dec 13 06:00:00 EST 2014

1
আপনি এটিও ব্যবহার করতে পারেন: ক্যালেন্ডার ক্যাল = ক্যালেন্ডার .getInstance ();
স্টেফান স্প্রেঞ্জার

4
Date argDate = new Date(); //set your date.
String argTime = "09:00"; //9 AM - 24 hour format :- Set your time.
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
String dateTime = sdf.format(argDate) + " " + argTime;
Date requiredDate = dateFormat.parse(dateTime);

4

আপনি যদি ব্যবহার করতে ইচ্ছুক java.timeহন তবে আইএসও 8601 ফর্ম্যাটেড সময়সীমা যুক্ত করার একটি পদ্ধতি এখানে রয়েছে:

import java.time.Duration;
import java.time.LocalDateTime;

...

LocalDateTime yourDate = ...

...

// Adds 1 hour to your date.

yourDate = yourDate.plus(Duration.parse("PT1H")); // Java.
// OR
yourDate = yourDate + Duration.parse("PT1H"); // Groovy.  

1
Duration.parse(iso8601duration)আকর্ষণীয়, ধন্যবাদ, কিন্তু আপনি অপারেটর ব্যবহার করতে পারবেন না হয় +উপর LocalDateTime, সম্পাদনা করতে যে চাইবেন। কিন্তু .plus(...)কাজ করে।
qlown

ধন্যবাদ @ ক্লাউন, আমি অনুমান করি + গ্রোভিতে কাজ করছে কারণ আমি এখন এটি ব্যবহার করছি। আমি সেই অনুযায়ী উত্তরটি পরিবর্তন করব।
ড্যানিয়েল

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

@ বাসিলবার্ক Dateঅবজেক্টটি হ্রাস করা হয়েছে। প্রশ্নটি অস্পষ্ট যখন এটি টাইম জোনে আসে তাই আমার উত্তরগুলি দাঁড়িয়ে। উপরন্তু, আপনি শুধু অদলবদল করতে পারেন LocalDateTimeজন্য ZonedDateTime
ড্যানিয়েল

4

আপনি জোদা ডেটটাইম এপিআই দিয়ে এটি করতে পারেন

DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();

কাজ করার পরে আমি 1 ম লাইনটিকে ডেটটাইম ডেটটাইম = নতুন ডেটটাইম (ডেটওবিজে) এ পরিবর্তন করেছি;
সুন্দররাজ গোবিন্দসময়

1

জাভা 8 ক্লাস ব্যবহার করে। আমরা নীচের মতো খুব সহজেই তারিখ এবং সময়কে কাজে লাগাতে পারি।

LocalDateTime today = LocalDateTime.now();
LocalDateTime minusHours = today.minusHours(24);
LocalDateTime minusMinutes = minusHours.minusMinutes(30);
LocalDate localDate = LocalDate.from(minusMinutes);

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

0

আপনি জাভা 8 থেকে লোকালডেটটাইম ক্লাস ব্যবহার করতে পারেন উদাহরণস্বরূপ:

long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));

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

-1

আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন, এটি বোঝা এবং বাস্তবায়ন করা সহজ:

public static java.util.Date AddingHHMMSSToDate(java.util.Date date, int nombreHeure, int nombreMinute, int nombreSeconde) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.HOUR_OF_DAY, nombreHeure);
    calendar.add(Calendar.MINUTE, nombreMinute);
    calendar.add(Calendar.SECOND, nombreSeconde);
    return calendar.getTime();
}

এই পদ্ধতির ইতিমধ্যে কয়েক বছর আগে পোস্ট করা অন্য উত্তর উপস্থাপন করা হয় । আমি দেখতে পাচ্ছি না যে এটি কীভাবে আরও মূল্য যুক্ত করে।
বেসিল Bourque

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