জাভাতে তারিখ অবজেক্ট থেকে এক্স দিনকে কীভাবে বিয়োগ করবেন?


146

আমি এরকম কিছু করতে চাই:

Date date = new Date(); // current date
date = date - 300; // substract 300 days from current date and I want to use this "date"

এটা কিভাবে করতে হবে?


4
বাধ্যতামূলক "জোডা সময় ব্যবহার করুন" মন্তব্য।
স্টিভ ম্যাকলিউড

1
নিম্নলিখিত লিঙ্ক আপনার জন্য সহায়ক হতে পারে [লিঙ্ক এখানে বর্ণনা লিখুন] [1] [লিঙ্ক এখানে বর্ণনা লিখুন] [2] [1]। Stackoverflow.com/questions/212321/... [2]: stackoverflow.com/questions/ 2623610 /…
অমি

এফওয়াইআই, জাভা.টাইম ক্লাসগুলির দ্বারা দমনকৃত পুরানো ডেট-টাইম ক্লাসগুলি যেমন java.util.Dateএখন লিগ্যাসি
বাসিল বাউর্কে

উত্তর:


279

জাভা 8 এবং তারপরে

জাভা 8 এর তারিখের সময় এপিআই পরিবর্তন সহ, ব্যবহার করুন LocalDate

LocalDate date = LocalDate.now().minusDays(300);

একইভাবে আপনি করতে পারেন

LocalDate date = someLocalDateInstance.minusDays(300);

Java.util.Date <--> java.time.LocalDateTime এর মধ্যে অনুবাদ করার জন্য https://stackoverflow.com/a/23885950/260990 দেখুন

Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());

জাভা 7 এবং তার আগের

Calendarএর add()পদ্ধতি ব্যবহার করুন

Calendar cal = Calendar.getInstance();
cal.setTime(dateInstance);
cal.add(Calendar.DATE, -30);
Date dateBefore30Days = cal.getTime();

22
আপনি বর্তমান তারিখের সময়টি বিবেচনা করতে না চান এমন ক্ষেত্রে এটি আপনার কাস্টম তারিখটি ইনস্টল করতে হবে
জিগার জোশি

11
জাভার ডেট হ্যান্ডলিং এতো ফুলে গেছে!
ডিগ্রি ডু

1
এটি 4 বছরের পুরানো উত্তর। এর সাম্প্রতিক সংস্করণগুলিতে নতুন ডেটটাইম এপিআই পরিবর্তন হয়েছে। আমি উত্তরটি সম্পাদনা করব
জিগার জোশী

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

@ জিগারজোশি আপনি জাভা 8 এপিআই দিয়ে আপনার উত্তরটি আপডেট করে রাখলে এটি দুর্দান্ত হবে। আপনার উত্তর হ'ল গ্রহণযোগ্য উত্তর যা লোকেরা প্রথমে দেখে।
জোটায়েন

47

@ জিগারজোশি এটির উত্তরের উত্তর, এবং অবশ্যই @ ব্যবহারের জন্য টিম সুপারিশ। জোদা-সময়

আমি কেবল একটি থেকে দিনগুলি বিয়োগ করতে আরও সম্ভাবনা যুক্ত করতে চাই java.util.Date

Apache প্রদান কমন্স

একটি সম্ভাবনা হ'ল অ্যাপাচি-কমন্স-ল্যাং ব্যবহার করা । আপনি DateUtilsনিম্নলিখিত হিসাবে এটি ব্যবহার করে করতে পারেন :

Date dateBefore30Days = DateUtils.addDays(new Date(),-30);

অবশ্যই commons-langকেবলমাত্র তারিখ বিয়োগ করতে নির্ভরতা যুক্ত করুন এটি সম্ভবত কোনও ভাল বিকল্প নয়, তবে আপনি যদি ইতিমধ্যে commons-langএটি একটি ভাল পছন্দ ব্যবহার করেন তবে। এছাড়া সুবিধাজনক পদ্ধতি addYears, addMonths, addWeeksএবং তাই, কটাক্ষপাত করা API এখানে

জাভা 8

আর একটি সম্ভাবনা জাভা 8LocalDate থেকে পদ্ধতিটি ব্যবহার করে নতুনটির সুযোগ নেওয়া minusDays(long days):

LocalDate dateBefore30Days = LocalDate.now(ZoneId.of("Europe/Paris")).minusDays(30);

LocalDateTimeএই শ্রেণিটি উদ্দেশ্যমূলকভাবে ব্যবহার করার কোনও কারণ নেই টাইম জোন বা অফসেট থেকে ইউটিসি সম্পর্কিত কোনও ধারণা নেই। অঞ্চল / অফসেট অজানা বা প্রাসঙ্গিক না হলেই এটি ব্যবহার করুন। পরিবর্তে এটি ব্যবহার করুন LocalDateএবং ZoneIdএর nowপদ্ধতিটি কল করার সময় পাস করুন । জ্যাকব ভ্যান লিনজেনের সঠিক উত্তরটি দেখুন ।
বেসিল Bourque

1
@ বাসিলবার্ক আপনার পরামর্শের পরে, আমি এপিআই পরীক্ষা করে দেখছি এবং আপনি সম্পূর্ণ সঠিক, তাই আমি উত্তর আপডেট করছি therefore ধন্যবাদ।
অ্যালবসিফ

ব্রায়ান Montellano মন্তব্য করতে চাই: কোন করা উচিত হবে না sDateUtils, এটি শুধু DateUtil
ওলে ভিভি

@ OleV.V। ব্রায়ান Montellano ভুল, আপনি না পরীক্ষা করতে DateUtilsডক্স
albciff

33

300 দিনের পূর্বে তারিখ পেতে কেবল এটি ব্যবহার করুন, আপনার দিনের সাথে 300 প্রতিস্থাপন করুন:

Date date = new Date(); // Or where ever you get it from
Date daysAgo = new DateTime(date).minusDays(300).toDate();

এখানে,

DateTime হয় org.joda.time.DateTime;

Date হয় java.util.Date


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

13

জাভা 8 টাইম এপিআই:

Instant now = Instant.now(); //current date
Instant before = now.minus(Duration.ofDays(300));
Date dateBefore = Date.from(before);

আমার অবশ্যই জাভা 8 এপিআই বোঝাতে হবে, 7 নয় java.time। এছাড়াও, কেবল কোনও কোড স্নিপেটের চেয়ে স্ট্যাক ওভারফ্লোতে কিছু আলোচনা / ব্যাখ্যা সাধারণত প্রত্যাশিত। আপনার স্পষ্টতই ব্যাখ্যা Durationকরা উচিত কারণ এটি ভ্যান লিনজেনের দ্বারা বিদ্যমান উত্তরটির চেয়ে আপনার উত্তরের অ্যাড -মান ।
বাসিল বার্ক

জাভা 8 কারণের, স্থির
গ্রেগরি কিসলিন

এত কাছাকাছি, তবে একটি "নির্ধারিত তারিখ অবজেক্ট" পরিবর্তনের জন্য হওয়া উচিত, "এখনই নয়"
ভারাল

9

আপনি এখানে দেখতে পাচ্ছেন যে আপনি করতে পারেন এমন অনেক হেরফের। এখানে একটি উদাহরণ যা আপনি কী করতে পারেন তা দেখাচ্ছে!

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();

//Add one day to current date.
cal.add(Calendar.DATE, 1);
System.out.println(dateFormat.format(cal.getTime()));

//Substract one day to current date.
cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(dateFormat.format(cal.getTime()));

/* Can be Calendar.DATE or
*  Calendar.MONTH, Calendar.YEAR, Calendar.HOUR, Calendar.SECOND
*/

@ জিগার জোশী: আমি আপনার উত্তরটি দেখতে পেলাম না ... আমার কি মুছে ফেলা উচিত?
ওয়ালডিআরআর

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

9

জাভা 8 এর মাধ্যমে এটি এখন সত্যিই সহজ:

 LocalDate date = LocalDate.now().minusDays(300);

নতুন এপিআইয়ের একটি দুর্দান্ত গাইড এখানে পাওয়া যাবে


4
আমি সর্বদা nowmethod চ্ছিক সময় অঞ্চলটি (বা অফসেট থেকে-ইউটিসি) সেই পদ্ধতিতে পাস করার পরামর্শ দিই । বাদ দেওয়া থাকলে, জেভিএমের বর্তমান ডিফল্ট সময় অঞ্চলটি স্পষ্টভাবে এবং নিঃশব্দে প্রয়োগ করা হয়েছে। আপনার নিয়ন্ত্রণ বাইরে যে ডিফল্ট মিথ্যা এমনকি কোনো মুহূর্তে পরিবর্তন করতে পারেন সময় রানটাইম। উদাহরণ: LocalDate.now( ZoneId.of( "America/Montreal" )
বাসিল বাউরক

"এখনই" নয়, প্রশ্ন অনুসারে একটি স্বেচ্ছাচারী তারিখের অবজেক্টে থাকা দরকার
ভরাল

1

কাজটি আরও সহজ করার জন্য আমি একটি ফাংশন তৈরি করেছি।

  • তারিখের পরে 7 দিনের জন্য: dateCalculate(dateString,"yyyy-MM-dd",7);

  • তারিখ স্ট্রিং পর্যন্ত 7 দিন পেতে: dateCalculate(dateString,"yyyy-MM-dd",-7);


public static String dateCalculate(String dateString, String dateFormat, int days) {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat s = new SimpleDateFormat(dateFormat);
    try {
        cal.setTime(s.parse(dateString));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    cal.add(Calendar.DATE, days);
    return s.format(cal.getTime());
}

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

প্রশ্নের মধ্যে তারিখ-সময় অবজেক্টগুলি জড়িত থাকে, স্ট্রিং উত্পন্ন করে না। যাইহোক, LocalDate.parse( "2017-01-23").plusWeeks( 1 )আপনার নিজের পদ্ধতি লেখার চেয়ে সহজ এবং আরও স্ব-ডকুমেন্টিং।
তুলসী বাউরক

0

আপনি সিম্পলডেট ফরমেটের সাথে ক্যালেন্ডারে সহজে বিয়োগ করতে পারেন

 public static String subtractDate(String time,int subtractDay) throws ParseException {


        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH);
        cal.setTime(sdf.parse(time));
        cal.add(Calendar.DATE,-subtractDay);
        String wantedDate = sdf.format(cal.getTime());

        Log.d("tag",wantedDate);
        return wantedDate;

    }

-4
c1.set(2017, 12 , 01); //Ex: 1999 jan 20    //System.out.println("Date is : " + sdf.format(c1.getTime()));
  c1.add(Calendar.MONTH, -2); // substract 1 month
  System.out.println
  ("Date minus 1 month : "
      + sdf.format(c1.getTime()));

2
তাই আপনাকে স্বাগতম। দয়া করে কেবল উত্তরগুলি থেকে বিরত থাকুন। Stackoverflow.com/help/how-to-answer দেখুন । এবং দয়া করে আপনার কোডটি ফর্ম্যাট করুন।
উয়ে অলনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.