从日期提取日
我以毫秒为单位从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
对象,而问题不是这样。