ฉันต้องการทำสิ่งที่ชอบ:
Date date = new Date(); // current date
date = date - 300; // substract 300 days from current date and I want to use this "date"
ทำอย่างไร?
ฉันต้องการทำสิ่งที่ชอบ:
Date date = new Date(); // current date
date = date - 300; // substract 300 days from current date and I want to use this "date"
ทำอย่างไร?
คำตอบ:
ด้วยการเปลี่ยนแปลงวันที่และเวลา API ของ Java 8 ให้ใช้ LocalDate
LocalDate date = LocalDate.now().minusDays(300);
ในทำนองเดียวกันคุณสามารถมี
LocalDate date = someLocalDateInstance.minusDays(300);
อ้างถึงhttps://stackoverflow.com/a/23885950/260990สำหรับการแปลระหว่าง java.util.Date <--> java.time.LocalDateTime
Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
Calendar cal = Calendar.getInstance();
cal.setTime(dateInstance);
cal.add(Calendar.DATE, -30);
Date dateBefore30Days = cal.getTime();
java.util.Date
, java.util.Calendar
และjava.text.SimpleTextFormat
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียน ดูการสอนโดยออราเคิล
@JigarJoshi เป็นคำตอบที่ดีและแน่นอน @Tim แนะนำให้ใช้ Joda เวลา
java.util.Date
ฉันเพียงต้องการที่จะเพิ่มความเป็นไปได้มากขึ้นที่จะลบวันจาก
ความเป็นไปได้หนึ่งคือการใช้Apache-คอมมอน-lang คุณสามารถทำได้โดยใช้DateUtils
ดังต่อไปนี้:
Date dateBefore30Days = DateUtils.addDays(new Date(),-30);
แน่นอนเพิ่มการcommons-lang
พึ่งพาที่จะทำเพียงการลบวันที่มันอาจจะไม่ใช่ตัวเลือกที่ดี แต่ถ้าคุณใช้อยู่แล้วcommons-lang
มันเป็นตัวเลือกที่ดี นอกจากนี้ยังมีวิธีการที่สะดวกในการaddYears
, addMonths
, addWeeks
และอื่น ๆ ให้ดูที่การAPI ที่นี่
ความเป็นไปได้อีกอย่างคือการใช้ประโยชน์จากสิ่งใหม่LocalDate
จากJava 8โดยใช้minusDays(long days)
วิธีการ:
LocalDate dateBefore30Days = LocalDate.now(ZoneId.of("Europe/Paris")).minusDays(30);
LocalDateTime
เป็นคลาสนั้นโดยเจตนาไม่มีแนวคิดของเขตเวลาหรือออฟเซ็ตจาก UTC ใช้เฉพาะเมื่อไม่ทราบเขต / ออฟเซ็ตหรือไม่เกี่ยวข้อง แทนที่จะใช้LocalDate
และส่ง a ZoneId
เมื่อเรียกnow
ใช้เมธอด ดูคำตอบที่ถูกต้องโดย Jacob van Lingen
เพียงใช้สิ่งนี้เพื่อรับวันที่ก่อน 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
Java 8 Time API:
Instant now = Instant.now(); //current date
Instant before = now.minus(Duration.ofDays(300));
Date dateBefore = Date.from(before);
java.time
อาจช่วยได้ นอกจากนี้โดยทั่วไปแล้วคาดว่าจะมีการอภิปราย / คำอธิบายกับ Stack Overflow ไม่ใช่เพียงแค่ข้อมูลโค้ด แน่นอนคุณควรจะอธิบายDuration
ว่าเป็นมูลค่าเพิ่มของคำตอบของคุณมากกว่าที่มีอยู่โดยรถตู้ Lingen
อย่างที่คุณเห็นที่นี่มีการจัดการมากมายที่คุณสามารถทำได้ นี่คือตัวอย่างที่แสดงสิ่งที่คุณสามารถทำได้!
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
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และต่อมา ดูการสอนโดยออราเคิล
ด้วย Java 8 มันง่ายมากในตอนนี้:
LocalDate date = LocalDate.now().minusDays(300);
now
วิธีการนั้นเสมอ หากไม่ได้ระบุเขตเวลาเริ่มต้นปัจจุบันของ JVM จะถูกนำไปใช้โดยปริยายและเงียบ ๆ ค่าเริ่มต้นนั้นอยู่นอกการควบคุมของคุณและสามารถเปลี่ยนแปลงได้ตลอดเวลาแม้ในระหว่างรันไทม์ ตัวอย่าง: LocalDate.now( ZoneId.of( "America/Montreal" )
.
ฉันได้สร้างฟังก์ชั่นเพื่อให้งานง่ายขึ้น
เป็นเวลา 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
ว่าขณะนี้มีมรดกแทนที่โดยjava.timeชั้นเรียน ดูการสอนโดยออราเคิล
LocalDate.parse( "2017-01-23").plusWeeks( 1 )
ง่ายกว่าการเขียนวิธีการของคุณเองและเป็นเอกสารด้วยตนเองมากขึ้น
คุณสามารถลบได้อย่างง่ายดายด้วยปฏิทินด้วย SimpleDateFormat
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;
}
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()));