只得到一个月的字符串yyyy-mm-DDThh:mm:ssZ

时间:2016-04-28 14:37:34

标签: java android date simpledateformat formatdatetime

很抱歉这个简单的问题,但我在论坛上进行了很多研究,上面没有一个帮助过我。我的数据库格式为“yyyy-mm-ddThh:mm:ssZ”的日期格式正好在我的数据库中。我只需要抓住年,月和日来与另一个字符串进行比较。 我得到的最接近的是它不起作用。

String dateArracoamento = arracoamento.getDate();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(dateArracoamento);
String dateArracoamentoFormat = output.format(d);

例如:我的dateArracoamento = 2016-04-28T10:10:10Z。我只需要2016-04-28而不是完整的日期。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以使用与格式化输出相同的格式化程序来解析该日期字符串。

    String input = "2016-04-28T10:10:10Z";
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String output = dateFormat.format(dateFormat.parse(input));

答案 1 :(得分:0)

您没有提供太多信息,但是......

首先,确保d不为null并且您捕获任何解析异常,因此您的字符串格式日期已正确解析。然后,我建议您使用Calendar类来比较日期或按照您的意愿,获取年,月,日等...

检查此示例:

    Date d = null;
    try {   
        d = sdf.parse(dateArracoamento);
        if (d != null) {
            String dateArracoamentoFormat = output.format(d);
            Calendar c = Calendar.getInstance();
            c.setTime(d);
            c.get(Calendar.YEAR);
            c.get(Calendar.MONTH);
            c.get(Calendar.DAY_OF_MONTH);
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }

答案 2 :(得分:0)

其他答案已过时,使用旧的遗留类。

java.time

Java 8及更高版本中内置的java.time框架取代了麻烦的旧日期时间类。

ISO 8601

您的输入字符串恰好采用标准ISO 8601格式。

在解析/生成日期时间值的String表示时,java.time类默认使用ISO 8601格式。因此无需指定格式化模式。

Instant

Instant代表UTC中时间轴上的一个时刻,分辨率为nanoseconds

Instant instant = Instant.parse( "2016-04-29T22:04:07Z" );

LocalDate

LocalDate类仅代表日期,没有时间和没有时区。要实现此目的,请应用UTC(ZoneOffset)偏移量来获取OffsetDateTime个对象,或应用全时区域(ZoneId)来获取ZonedDateTime

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
LocalDate ld = zdt.toLocalDate();

也许你真的打算继续使用UTC。使用常量ZoneOffset.UTC

OffsetDateTime odt = OffsetDateTime.ofInstant( instant , ZoneOffset.UTC );
LocalDate ld = odt.toLocalDate();