从日期提取日

我以毫秒为单位从SOAP服务接收时间戳。 所以我这样做:

Date date = new Date( mar.getEventDate() ); 

如何从日期中提取月中的某一天,因为不推荐使用Date::getDay()等方法?

我正在使用一个小黑客,但我不认为这是获得一天的正确方法。

 SimpleDateFormat sdf = new SimpleDateFormat( "dd" ); int day = Integer.parseInt( sdf.format( date ) ); 

使用Calendar

 Calendar cal = Calendar.getInstance(); cal.setTime(mar.getEventDate()); int day = cal.get(Calendar.DAY_OF_MONTH); 

更新: Joda-Time项目现在处于维护模式 ,团队建议迁移到java.time类。 请参阅Oracle教程 。

请参阅Ortomala Lokni的正确答案 ,使用现代java.time类。 我将这个过时的答案保留为历史。


Lokni的回答是正确的。

这是相同的想法,但使用Joda-Time 2.8。

 long millisSinceEpoch = mar.getEventDate() ; DateTimeZone zone = DateTimeZone.forID( "America/Montreal" ) ; // Or DateTimeZone.UTC LocalDate localDate = new LocalDate( millisSinceEpoch , zone ) ; int dayOfMonth = localDate.getDayOfMonth() ; 

给定问题中使用的Date构造函数

 Date date = new Date(mar.getEventDate()); 

方法mar.getEventDate()返回一个long ,表示自标准基准时间(称为“epoch”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。

Java 8及更高版本

在Java 8中,您可以从此值中提取月中的某天,假设UTC为

 LocalDateTime.ofEpochSecond(mar.getEventDate(),0,ZoneOffset.UTC).getDayOfMonth(); 

另请注意,cletus给出的答案假设mar.getEventDate()返回Date对象,而问题不是这样。