yyyy-mm-dd
ฉันกำลังทำงานกับวันที่ในรูปแบบนี้:
ฉันจะเพิ่มวันที่นี้ภายในหนึ่งวันได้อย่างไร
yyyy-mm-dd
ฉันกำลังทำงานกับวันที่ในรูปแบบนี้:
ฉันจะเพิ่มวันที่นี้ภายในหนึ่งวันได้อย่างไร
คำตอบ:
สิ่งนี้ควรทำเคล็ดลับ:
String dt = "2008-01-01"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime()); // dt is now the new date
Java ดูเหมือนจะดีหลังแปดลูกเมื่อเทียบกับ C # วิธีการยูทิลิตี้นี้แสดงวิธีการที่จะทำใน Java SE 6 โดยใช้วิธีการ Calendar.add (สันนิษฐานว่าเป็นวิธีที่ง่ายเท่านั้น)
public class DateUtil
{
public static Date addDays(Date date, int days)
{
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days); //minus number would decrement the days
return cal.getTime();
}
}
หากต้องการเพิ่มหนึ่งวันตามคำถามที่ถามให้เรียกมันดังนี้:
String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);
java.util.Date
, java.util.Calendar
และjava.text.SimpleDateFormat
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และต่อมา ดูการสอนโดยออราเคิล
บน Java 8 และใหม่กว่าแพ็คเกจ java.timeทำให้สิ่งนี้เป็นไปโดยอัตโนมัติ ( บทช่วยสอน )
สมมติว่าString
อินพุตและเอาต์พุต:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
LocalDate
แต่ข้อมูลที่มีอยู่ในคำถามที่เป็นที่ของ
ฉันชอบที่จะใช้DateUtilsจาก Apache ตรวจสอบhttp://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.htmlมันมีประโยชน์โดยเฉพาะอย่างยิ่งเมื่อคุณต้องใช้มันหลาย ๆ ที่ในโครงการของคุณและไม่ต้องการที่จะเขียนวิธีการซับเดียว
API กล่าวว่า:
addDays (วันที่วันที่, จำนวน int): เพิ่มจำนวนวันไปยังวันที่ส่งคืนวัตถุใหม่
โปรดทราบว่ามันจะส่งกลับวัตถุวันที่ใหม่และไม่ทำการเปลี่ยนแปลงไปก่อนหน้านี้เอง
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );
สร้างวัตถุปฏิทินและใช้วิธีการเพิ่ม (Calendar.DATE, 1);
ดู Joda-Time ( https://www.joda.org/joda-time/ )
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
โปรดทราบว่าบรรทัดนี้เพิ่ม 24 ชั่วโมง:
d1.getTime() + 1 * 24 * 60 * 60 * 1000
แต่บรรทัดนี้เพิ่มหนึ่งวัน
cal.add( Calendar.DATE, 1 );
ในวันที่มีการเปลี่ยนเวลาออมแสง (25 หรือ 23 ชั่วโมง) คุณจะได้รับผลลัพธ์ที่แตกต่างกัน!
Java 8 เพิ่ม API ใหม่สำหรับการทำงานกับวันที่และเวลา
ด้วย Java 8 คุณสามารถใช้โค้ดต่อไปนี้:
// parse date from yyyy-mm-dd pattern
LocalDate januaryFirst = LocalDate.parse("2014-01-01");
// add one day
LocalDate januarySecond = januaryFirst.plusDays(1);
januaryFirst.plusDays(1)
date.plusDays(1)
คุณสามารถใช้ Simple java.util lib
Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
java.util.Date
, java.util.Calendar
และjava.text.SimpleDateFormat
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และต่อมา ดูการสอนโดยออราเคิล
Date today = new Date();
SimpleDateFormat formattedDate = new SimpleDateFormat("yyyyMMdd");
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1); // number of days to add
String tomorrow = (String)(formattedDate.format(c.getTime()));
System.out.println("Tomorrows date is " + tomorrow);
สิ่งนี้จะให้วันพรุ่งนี้ c.add(...)
พารามิเตอร์สามารถเปลี่ยนจาก 1 เป็นหมายเลขอื่นเพื่อการเพิ่มที่เหมาะสม
Date
หรือCalendar
อีกครั้ง
หากคุณใช้Java 8ให้ทำเช่นนี้
LocalDate sourceDate = LocalDate.of(2017, Month.MAY, 27); // Source Date
LocalDate destDate = sourceDate.plusDays(1); // Adding a day to source date.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // Setting date format
String destDate = destDate.format(formatter)); // End date
หากคุณต้องการใช้SimpleDateFormatให้ทำเช่นนี้
String sourceDate = "2017-05-27"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(sourceDate)); // parsed date and setting to calendar
calendar.add(Calendar.DATE, 1); // number of days to add
String destDate = sdf.format(calendar.getTime()); // End date
LocalDate
LocalDateTime
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
สิ่งนี้ใช้เวลาจำนวนมิลลิวินาทีนับตั้งแต่ยุคจาก oldDate และเพิ่มมูลค่า 1 วินาทีของมิลลิวินาทีจากนั้นใช้ตัวสร้างสาธารณะ Date () เพื่อสร้างวันที่โดยใช้ค่าใหม่ วิธีนี้ช่วยให้คุณเพิ่ม 1 วันหรือจำนวนชั่วโมง / นาทีใด ๆ ไม่เพียง แต่ทั้งวัน
ตั้งแต่Java 1.5 TimeUnit.DAYS.toMillis (1)ดูสะอาดกว่าสำหรับฉัน
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Date day = dateFormat.parse(string);
// add the day
Date dayAfter = new Date(day.getTime() + TimeUnit.DAYS.toMillis(1));
LocalDate
การเรียนในชั้นเรียน java.time สำหรับ Java 8 และต่อมาและกลับพอร์ต Java 6 & Java 7 พบในThreeTen-ย้ายกลับโครงการ
ใน Java 8 วิธีง่ายๆในการทำคือ:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Instant.now().plus( 1 , ChronoUnit.DAYS )
ล่ะ
ใน java 8 คุณสามารถใช้ java.time.LocalDate
LocalDate parsedDate = LocalDate.parse("2015-10-30"); //Parse date from String
LocalDate addedDate = parsedDate.plusDays(1); //Add one to the day field
คุณสามารถแปลงเป็นjava.util.Date
วัตถุดังนี้
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
คุณสามารถจัดรูปLocalDate
แบบเป็นสตริงได้ดังนี้
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
มันง่ายมากพยายามอธิบายด้วยคำง่ายๆ รับวันนี้วันที่ด้านล่าง
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
ตอนนี้ตั้งหนึ่งวันล่วงหน้ากับวันที่นี้โดยวิธี calendar.add ซึ่งจะใช้เวลา (คงที่ค่า) ค่าคงที่นี้อาจเป็น DATE, ชั่วโมง, นาที, วินาทีเป็นต้นและค่าคือค่าคงที่ เช่นเดียวกับหนึ่งวันค่าคงที่ล่วงหน้าคือ Calendar วันที่และค่าเป็น 1 เพราะเราต้องการค่าล่วงหน้าหนึ่งวัน
System.out.println(calendar.getTime());// print modified date which is
วันพรุ่งนี้
ขอบคุณ
Apache Commons แล้วมี DateUtils.addDays นี้วันที่ (วันที่จำนวนเงิน int) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java .util.Date,% 20int% 29ที่คุณใช้หรือคุณสามารถไปกับ JodaTime เพื่อทำให้มันสะอาดขึ้น
เพียงแค่ผ่านวันที่ในสตริงและจำนวนวันถัดไป
private String getNextDate(String givenDate,int noOfDays) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
String nextDaysDate = null;
try {
cal.setTime(dateFormat.parse(givenDate));
cal.add(Calendar.DATE, noOfDays);
nextDaysDate = dateFormat.format(cal.getTime());
} catch (ParseException ex) {
Logger.getLogger(GR_TravelRepublic.class.getName()).log(Level.SEVERE, null, ex);
}finally{
dateFormat = null;
cal = null;
}
return nextDaysDate;
}
หากคุณต้องการเพิ่มหน่วยเวลาเดียวและคุณคาดหวังว่าเขตข้อมูลอื่น ๆ จะเพิ่มขึ้นเช่นกันคุณสามารถใช้วิธีการเพิ่มได้อย่างปลอดภัย ดูตัวอย่างด้านล่าง:
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(1970,Calendar.DECEMBER,31);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, 1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, -1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
จะพิมพ์:
1970-12-31
1971-01-01
1970-12-31
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
Calendar
คลาสที่ออกแบบมาไม่ดีและล้าสมัยในปี 2019
หากคุณใช้ Java SE 8 หรือสูงกว่าคุณควรใช้Date / Time API ใหม่
int days = 7;
LocalDate dateRedeemed = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");
String newDate = dateRedeemed.plusDays(days).format(formatter);
System.out.println(newDate);
หากคุณต้องแปลงจากjava.util.Date
เป็นjava.time.LocalDate
คุณสามารถใช้วิธีนี้
public LocalDate asLocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
return zdt.toLocalDate();
}
หากคุณกำลังใช้เวอร์ชันก่อนหน้า Java SE 8 ฉันแนะนำให้คุณใช้Joda-Time
Joda-Time จัดเตรียมการแทนที่คุณภาพสำหรับคลาสวันที่และเวลาของ Java และเป็นไลบรารีวันที่และเวลามาตรฐานของพฤตินัยสำหรับ Java ก่อน Java SE 8
int days = 7;
DateTime dateRedeemed = DateTime.now();
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/uuuu");
String newDate = dateRedeemed.plusDays(days).toString(formatter);
System.out.println(newDate);
java.time
ส่วนไม่ถูกต้อง มันควรจะdd/MM/uuuu
เทียบเท่ากับ JodaTime อย่างใดอย่างหนึ่ง
ใช้DateFormat
API เพื่อแปลงสตริงเป็นวัตถุวันที่จากนั้นใช้Calendar
API เพื่อเพิ่มหนึ่งวัน แจ้งให้เราทราบหากคุณต้องการตัวอย่างรหัสเฉพาะและฉันสามารถอัปเดตคำตอบของฉันได้
หากคุณใช้ Java 8 java.time.LocalDate
และjava.time.format.DateTimeFormatter
สามารถทำให้การทำงานนี้ค่อนข้างง่าย
public String nextDate(String date){
LocalDate parsedDate = LocalDate.parse(date);
LocalDate addedDate = parsedDate.plusDays(1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd");
return addedDate.format(formatter);
}
toString()
เพื่อสร้างรูปแบบสตริง i yyyy-MM-dd (และหากคุณยืนยันโปรดจำไว้ว่าmm
เป็นนาทีขณะที่MM
เป็นเดือน)
คุณสามารถใช้แพ็คเกจนี้ได้จาก "org.apache.commons.lang3.time":
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date myNewDate = DateUtils.addDays(myDate, 4);
Date yesterday = DateUtils.addDays(myDate, -1);
String formatedDate = sdf.format(myNewDate);
Date
ชั้นแนะนำในปี 2561 เป็นคำแนะนำที่ไม่ดี ลำบากเก่าชั้นเรียนวันที่เวลาเช่นjava.util.Date
, java.util.Calendar
และjava.text.SimpleDateFormat
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และ Java 9 โปรดดูที่การสอนโดยออราเคิล ดูคำตอบอื่น ๆ ที่ใช้LocalDate
คลาส
SimpleDateFormat
ระดับที่น่าเสียดายที่อัดฉีดโซนเวลาโดยปริยายใช้โซนเริ่มต้น JVM ปัจจุบัน ดังนั้นผลลัพธ์ของรหัสนี้จะแตกต่างกันไปตามค่าเริ่มต้นปัจจุบัน - และค่าเริ่มต้นนั้นสามารถเปลี่ยนแปลงได้ตลอดเวลาระหว่างรันไทม์
มันง่ายจริง ๆ หนึ่งวันมี 86400000 milliSeconds ดังนั้นก่อนอื่นคุณจะได้รับเวลาปัจจุบันเป็นมิลลิวินาทีจากระบบโดยใช้System.currentTimeMillis()
แล้วเพิ่ม 84000000 มิลลิวินาทีและใช้Date
คลาสเพื่อสร้างรูปแบบวันที่สำหรับมิลลิวินาที
ตัวอย่าง
String Today = new Date(System.currentTimeMillis()).toString();
สตริงวันนี้จะเป็น 2019-05-9
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
String Tommorow จะเป็น 2019-05-10
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
String DayAfterTommorow จะเป็น 2019-05-11
Date
คลาสที่แย่มากซึ่งถูกแทนที่เมื่อหลายปีก่อนโดยคลาสjava.time ที่ทันสมัย ง่ายกว่านี้มาก ๆ ที่จะใช้:LocalDate.parse( "2019-01-23" ).plusDays( 1 )
ขอชี้แจงกรณีการใช้งาน: คุณต้องการที่จะทำเลขคณิตปฏิทินและเริ่ม / จบลงด้วยการjava.util.Date
วิธีการบางอย่าง:
พิจารณาใช้java.time.Instant :
Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
Date
กับที่ทันสมัยjava.timeInstant
เรียนเช่น java.timeเรียนทั้งหมดแย่งชั้นเรียนเดิม โดยเฉพาะแทนที่Instant
java.util.Date
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
Sun Apr 30 16:25:33 CEST 2017
Mon May 01 16:25:33 CEST 2017
มันยังคงเป็นทางออกที่ท้อแท้ ไม่เพียง แต่เป็นวิธีการคัดค้านด้วยเหตุผลที่ดี แต่ในปี 2560 เรามีทางเลือกที่ดีมากในDate
ชั้นเรียน