1. Tăng hoặc giảm ngày, tháng, năm (lên / xuống) một đơn vị thời gian cho một mốc thời gian.
Để làm điều này bạn sử dụng 2 phương thức roll() hoặc add() . Tôi không muốn giải thích nhiều ^^ vì bạn có thể tham khảo điều đó tại đây , nhưng đoạn code ví dụ sẽ giúp bạn thấy rõ cách dùng .
Tôi muốn nói một chút về sự khác nhau giữa 2 phương thức này.
- Đối với phương thức roll() : làm thay đổi (Tăng / giảm) một đối tượng calendar cụ thể và không thay đổi đối tượng calendar lớn hơn (Đối tượng Calendar.MONTH được coi là lớn hơn Calendar.DATE, Calendar.YEAR lớn hơn Calendar.MONTH). Ví dụ: Bạn muốn thay đổi ngày trong mốc thời gian ("31-07-2011") thêm 8 ngày nữa ==> Bạn sử dụng roll() : roll(Calendar.DATE, 8) ; ==> Kết quả thu được sẽ là ("08-07-2011") .
- Đối với phương thức add(): làm thay đổi (Tăng / giảm) một đối tượng calendar cụ thể đồng thời làm thay đổi đối tượng calendar lớn hơn . Ví dụ : Đối với mốc thời gian ("31-07-2011") ở ví dụ trên, nếu dùng add():
add(Calendar.DATE, 8) ; ==> Kết quả thu được sẽ là ("08-08-2011") .
Source code ví dụ:
public static void UpDownDate() {
// Định dạng thời gian
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
// Định nghĩa mốc thời gian ban đầu là ngày 31-07-2011
Date date = Date.valueOf("2011-07-31");
c1.setTime(date);
c2.setTime(date);
System.out.println("Ngày ban đầu : " + dateFormat.format(c1.getTime()));
// Tăng ngày thêm 8 ngày -- Sử dụng phương thức roll()
c1.roll(Calendar.DATE, 8);
// c1.roll(Calendar.DATE, -8); // Giảm ngày 8 ngày ==> 23-07-2011
System.out.println("Ngày được tăng thêm 8 ngày (Sử dụng Roll) : "+ dateFormat.format(c1.getTime()));
/* Các trường hợp khác
c1.roll(Calendar.DATE, true); //Tăng 1 ngày -- Nếu muốn giảm một ngày truyền vào false
c1.roll(Calendar.MONTH, 2); //Tăng lên 2 tháng
c1.roll(Calendar.YEAR, 2) ; //Tăng lên 2 năm
*/
// Tăng ngày thêm 8 ngày -- Sử dụng phương thức add()
c2.add(Calendar.DATE, 8);
//c2.add(Calendar.DATE, -8); // Giảm ngày 8 ngày ==> 23-07-2011
System.out.println("Ngày được tăng thêm 8 ngày (Sử dụng add) : "
+ dateFormat.format(c2.getTime()));
/* Các trường hợp khác :
c2.add(Calendar.MONTH, 2); //Tăng lên 2 tháng
c2.add(Calendar.YEAR, 2) ; //Tăng lên 2 năm
*/
}
2. Khoảng cách giữa 2 ngày ( Đếm số ngày giữa 2 mốc thời gian).public static void daysBetween2Dates() {
// Định dạng thời gian
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
// Định nghĩa 2 mốc thời gian ban đầu
Date date1 = Date.valueOf("2011-06-15");
Date date2 = Date.valueOf("2011-07-30");
c1.setTime(date1);
c2.setTime(date2);
// Công thức tính số ngày giữa 2 mốc thời gian:
long noDay = (c2.getTime().getTime() - c1.getTime().getTime()) / (24 * 3600 * 1000);
System.out.print("Số ngày giữa " + dateFormat.format(c1.getTime())
+ " và " + dateFormat.format(c2.getTime()) + ": ");
System.out.println(noDay);
}
3. So sánh 2 mốc thời gian (So sánh 2 ngày) public static void compareDate(){
// Định nghĩa 2 mốc thời gian ban đầu
Date date1 = Date.valueOf("2011-06-15");
Date date2 = Date.valueOf("2011-07-30");
String relation;
if (date1.equals(date2))
relation = "Hai ngày trùng nhau";
else if (date1.before(date2)) // Hoặc else if (date1.after(date2)== false)
relation = " Trước";
else
relation = " Sau";
System.out.println(date1 + relation + ' ' + date2);
}
4. Kiểm tra một chuỗi có phải là một ngày hay không public boolean isValidDate(String inDate) {
if (inDate == null)
return false;
//set the format to use as a constructor argument
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
if (inDate.trim().length() != dateFormat.toPattern().length())
return false;
dateFormat.setLenient(false);
try {
//parse the inDate parameter
dateFormat.parse(inDate.trim());
}
catch (ParseException pe) {
return false;
}
return true;
}
5. Kiểm tra có phải năm nhuận hay không? public static boolean isLeapYear(int year) {
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
return true;
}
return false;
}
6. Đếm số ngày trong một tháng. public static void daysInMonth() {
TimeInJava tij = new TimeInJava();
Calendar c1 = Calendar.getInstance();
c1.set(2008, 6 , 20);
int year = c1.get(Calendar.YEAR);
int month = c1.get(Calendar.MONTH);
// int days = c1.get(Calendar.DATE);
int [] daysInMonths = {31,28,31,30,31,30,31,31,30,31,30,31};
daysInMonths[1] += tij.isLeapYear(year) ? 1 : 0; // Sử dụng phương thức kiểm tra năm nhuần ở trên
System.out.println("Số ngày trong tháng "+month+" năm "+year+" : "+ daysInMonths[c1.get(Calendar.MONTH)]);
}
7. So sánh giờ hiện tại có nằm trong khoảng giờ nào đó trong này hay không .Ví dụ : 10:20 có nằm trong khoảng 10:00 đến 10:40 hay không? :
//Phương thức xác định xem giờ hiện tại có thuộc vào một khoảng giờ nào đó hay không
public static boolean isInHappyHour(String startHour, String endHour) throws ParseException {
boolean result = false;
SimpleDateFormat hourFormat = new SimpleDateFormat("HH:mm");
Date start = hourFormat.parse(startHour);
Date end = hourFormat.parse(endHour);
Date now = new Date(System.currentTimeMillis());
String nowHourStr = hourFormat.format(now.getTime());
try {
Date nowHour = hourFormat.parse(nowHourStr);
if (nowHour.after(start) && nowHour.before(end) || (nowHour.equals(start) || (nowHour.equals(end)))) {
result = true;
}
} catch (ParseException e) {
result = false;
}
return result;
}
8. Xác định giữa 2 khoảng thời gian có bao nhiêu giờ, bao nhiêu phút, bao nhiêu giây:
public static void main(String[] args) {
String dateStart = "2012-03-14 09:33:58";
String dateStop = "2012-03-14 10:34:59";
// Custom date format
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
} catch (ParseException e) {
}
// Get msec from each, and subtract.
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000;
long diffMinutes = diff / (60 * 1000);
long diffHours = diff / (60 * 60 * 1000);
System.out.println("Số giây : " + diffSeconds + " seconds.");
System.out.println("Số phút: " + diffMinutes + " minutes.");
System.out.println("Số giờ: " + diffHours + " hours.");
}
==> Tạm thời share chừng này đã, khi nào có thời gian hoặc gặp thêm vấn đề tôi viết tiếp vậy ! ^^
Add thêm phương thức so sánh giờ hiện tại có nằm trong khoảng giờ nào đó trong này hay không . Ví dụ : 10:20 có nằm trong khoảng 10:00 đến 10:40 hay không? :
Trả lờiXóa//Phương thức xác định xem giờ hiện tại có thuộc vào một khoảng giờ nào đó hay không
public static boolean isInHappyHour(String startHour, String endHour) throws ParseException {
boolean result = false;
SimpleDateFormat hourFormat = new SimpleDateFormat("HH:mm");
Date start = hourFormat.parse(startHour);
Date end = hourFormat.parse(endHour);
Date now = new Date(System.currentTimeMillis());
String nowHourStr = hourFormat.format(now.getTime());
try {
Date nowHour = hourFormat.parse(nowHourStr);
if (nowHour.after(start) && nowHour.before(end) || (nowHour.equals(start) || (nowHour.equals(end)))) {
result = true;
}
} catch (ParseException e) {
result = false;
}
return result;
}
Phương thức này bị sai rồi nhé bạn !
Trả lờiXóapublic static boolean isLeapYear(int year) {
if ((year % 100 != 0) || (year % 400 == 0)) {
return true;
}
return false;
}
ví dụ như 1900, 2100 không được nhé
Xóa((year%4==0)&&(year%100!=100))||(year%400==0)
XóaXin sửa lại như sau :
Trả lờiXóapublic static boolean isLeapYear(int year) {
if ((year % 100 != 0) && (year % 400 == 0)) {
return true;
}
return false;
}
Cảm ơn bạn rất nhiều nhé! ^_^, Mình đã test lại cả mình và bạn đều làm chưa đúng. Bạn lưu ý nhé. Mình đã cập nhật lại phương thức đúng nhất ở trên nhé.
Trả lờiXóaCác bạn giúp mình với. Đề tài là làm 1 button để bắt đầu thời gian và một button kết thúc thời gian rồi tính khoảng thời gian đó.
Trả lờiXóahay lắm
Trả lờiXóaverry good
Trả lờiXóaThank!
Trả lờiXóaMình muốn tính số ngày từ năm này tới năm kia thì làm như thế nào ạ!
Trả lờiXóaVí dụ: 7/2015 - 6/2016= 11thang=330ngay
Nếu như (so ngay<365 là 0.5 năm)và =365 ngay là 1 năm. Cứ thế tăng lên.
k phải bài vd 2 đã làm rồi hay sao b
XóaHi, moi người có biết cách tính ra số tháng không ạ? ví dụ 2-7-2015 đến new date()
Trả lờiXóachào mọi người đến với lập trình java cơ bản
Trả lờiXóaAd có thể giải thích cho em dòng này được không ạ:
Trả lờiXóalong noDay = (c2.getTime().getTime() - c1.getTime().getTime())/(24*3600*1000);
Vì sao nó lại có những con số như vậy ạ?
Tks ad nhiều.
Đây là công thức tính ra ms (Mili giây) nhé bạn
Xóadays * 24 * 60 * 60 * 1000 = days * 86400000 ms
so sánh ngày nhập vào với ngày hiện tại ở máy tính thì làm sao ạ
Xóa