我从SOAP服务收到一个时间戳,以毫秒为单位。所以我这样做:
Date date = new Date( mar.getEventDate() );
如何从日期中提取当天的日期,因为Date::getDay()
等方法已被弃用?
我正在使用一个小黑客,但我不认为这是获得一天的正确方法。
SimpleDateFormat sdf = new SimpleDateFormat( "dd" );
int day = Integer.parseInt( sdf.format( date ) );
答案 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中,您可以从此值中提取月中的某天,假设为UTC,
LocalDateTime.ofEpochSecond(mar.getEventDate(),0,ZoneOffset.UTC).getDayOfMonth();
另请注意,cletus给出的答案假设mar.getEventDate()
返回Date
个对象,而问题并非如此。