从日期中提取日期

时间:2010-04-12 03:14:21

标签: java date

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

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

如何从日期中提取当天的日期,因为Date::getDay()等方法已被弃用?

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

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

3 个答案:

答案 0 :(得分:36)

使用Calendar

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

答案 1 :(得分:2)

更新: Joda-Time项目现在位于maintenance mode,团队建议迁移到java.time课程。请参阅Tutorial by Oracle

使用现代 java.time 类,查看Ortomala Lokni的correct Answer。我将这个过时的答案保留为历史记录。

Lokni的Answer是正确的。

这是相同的想法,但使用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() ;

答案 2 :(得分:1)

鉴于问题中使用的Date constructor

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个对象,而问题并非如此。