2011-08-29 54 views
36

Tôi đang cố gắng truy xuất ngày nào trong tháng.Cách nhận ngày trong tháng?

Chẳng hạn như hôm nay là ngày 29 tháng 8 năm 2011.

Điều tôi muốn làm là chỉ nhận được số ngày như 29 hoặc 30. Ngày nào trong tháng của tháng đó.

Làm cách nào để tôi thực hiện việc này?

+0

Một tìm kiếm nhanh chóng đến với điều này .. http://www.roseindia.net/java/beginners/DayYearToDayMonth.shtml –

Trả lời

68

Bạn sẽ muốn làm được một ví dụ Lịch và nhận đó là ngày trong tháng

Calendar cal = Calendar.getInstance(); 
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH); 

String dayOfMonthStr = String.valueOf(dayOfMonth); 

Bạn cũng có thể nhận được DAY_OF_WEEK, DAY_OF_YEAR, DAY_OF_WEEK_IN_MONTH vv

+1

Liệu có cách nào để có được điều này là một chuỗi? – yoshi24

+0

Mã được cập nhật cho câu hỏi tiếp theo – hooked82

2

Hãy xem GregorianCalendar, một cái gì đó như:

final Calendar now = GregorianCalendar.getInstance() 
final int dayNumber = now.get(Calendar.DAY_OF_MONTH); 
1

Bạn có thể bắt đầu bằng cách đọc tài liệu cho Date. Sau đó, bạn nhận thấy rằng tất cả các phương pháp của Ngày đều không được chấp nhận và chuyển sang Calender thay thế.

Calendar now = Calendar.getInstance(); 
System.out.println(now.get(Calendar.DAY_OF_MONTH)); 
11

Các phương pháp sau đây sẽ giúp bạn trong việc tìm kiếm ngày của bất kỳ thời điểm nhất định:

public static int getDayOfMonth(Date aDate) { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(aDate); 
    return cal.get(Calendar.DAY_OF_MONTH); 
} 
3

tl; dr

LocalDate.now().getDayOfMonth()  // Better to pass a `ZoneId` optional argument to `now` as shown below than rely implicitly on the JVM’s current default time zone. 

java.time

Cách tiếp cận hiện đại là LocalDate lớp để biểu thị giá trị chỉ ngày.

Múi giờ rất quan trọng trong việc xác định ngày hiện tại. Đối với bất kỳ thời điểm cụ thể nào, ngày thay đổi trên toàn cầu theo múi giờ.

ZoneId z = ZoneId.of("America/Montreal"); 
LocalDate ld = LocalDate.now(z) ; 
int dayOfMonth = ld.getDayOfMonth(); 

Bạn cũng có thể nhận được ngày trong tuần.

DayOfWeek dow = ld.getDayOfWeek(); 

Về java.time

Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp học ngày giờ legacy phiền hà cũ như java.util.Date, Calendar, & SimpleDateFormat.

Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển đến các lớp java.time.

Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310.

Sử dụng JDBC driver tương thích với JDBC 4.2 hoặc cao hơn, bạn có thể trao đổi java.time đối tượng trực tiếp với cơ sở dữ liệu của bạn. Không cần chuỗi và các lớp java.sql. *.

Nơi lấy các lớp java.time?

  • Java SE 8, Java SE 9, và sau đó
    • Built-in.
    • Một phần của API Java chuẩn với gói được triển khai.
    • Java 9 thêm một số tính năng và bản sửa lỗi nhỏ.
  • Java SE 6Java SE 7
    • Hầu hết các chức năng java.time được back-chuyển đến Java 6 & 7 trong ThreeTen-Backport.
  • Android
    • phiên bản sau của triển khai bó Android của các lớp java.time.
    • Đối với Android trước đó, dự án ThreeTenABP thích hợp ThreeTen-Backport (đã đề cập ở trên). Xem How to use ThreeTenABP….

Dự án mở rộng ThreeTen-Extra java.time với các lớp bổ sung. Dự án này là một nền tảng chứng minh cho những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval, YearWeek, YearQuartermore.


Joda thời gian

UPDATE: Dự án Joda-Thời gian bây giờ là trong chế độ bảo trì, và khuyên chuyển đổi sang các lớp java.time. Phần này còn nguyên vẹn cho lịch sử.

Sử dụng thư viện số Joda-Time 2.5 thay vì các lớp java.util.Date và .Calendar nổi tiếng phiền hà.

Múi giờ rất quan trọng để xác định ngày. Tốt hơn là chỉ định vùng thay vì dựa hoàn toàn vào múi giờ mặc định hiện tại của JVM đang được chỉ định.

DateTimeZone zone = DateTimeZone.forID("America/Montreal"); 
DateTime now = DateTime.now(zone).withTimeAtStartOfDay(); 
int dayOfMonth = now.getDayOfMonth(); 

Hoặc sử dụng mã tương tự với lớp LocalDate không có phần thời gian trong ngày.

-2
//This will get you the day of the month 
String.valueOf((Calendar.getInstance()).get(Calendar.DAY_OF_MONTH)) 
+0

Vui lòng chỉnh sửa với nhiều thông tin hơn. Các câu trả lời chỉ có mã và "dùng thử" này không được khuyến khích, bởi vì chúng không chứa nội dung có thể tìm kiếm được và không giải thích tại sao một người nào đó nên "thử cái này". – abarisone

+0

Vui lòng giải thích để người dùng có thể biết thêm về mã của bạn đang làm gì. – cammando

0

Java 8 Cập nhật

Java 8 giới thiệu các gói sau dành thời gian và thao tác cập nhật.

java.time.*; 
java.time.format.*; 

java.time.chono.*;  
java.time.temporal.*; 
java.time.zone.*; 

Đây là những tổ chức và trực quan hơn.

Chúng tôi chỉ cần hai gói hàng đầu cho cuộc thảo luận.
Có 3 lớp cấp cao nhất - LocalDate, LocalTime, LocalDateTime để mô tả ngày, giờ và ngày giờ tương ứng. Mặc dù, chúng được định dạng đúng trong toString(), mỗi lớp có phương thức định dạng chấp nhận DateTimeFormatter để định dạng theo cách tùy chỉnh.

DateTimeFormatter cũng có thể được sử dụng hiển thị ngày đã cho một ngày. Nó có vài

import java.time.*; 
import java.time.format.*; 

class DateTimeDemo{ 
    public static void main(String...args){ 
     LocalDateTime x = LocalDateTime.now(); 
     System.out.println(x.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)));//Shows Day and Date. 

     System.out.println(x.format(DateTimeFormatter.ofPattern("EE")));//Short Form 
     System.out.println(x.format(DateTimeFormatter.ofPattern("EEEE")));//Long Form 

    } 
} 

ofLocalizedTime chấp nhận FormatStyle mà là một liệt kê trong java.time.format

ofPattern chấp nhận String với các nhân vật mô hình hạn chế độ dài hạn chế. Dưới đây là các ký tự có thể được chuyển vào phương thức toPattern.

enter image description here

Bạn có thể thử số khác nhau của mẫu để xem làm thế nào sản lượng sẽ được.

Kiểm tra hiểu thêm về Java 8 DateTime API here

Các vấn đề liên quan