12

这是我传递时间戳的下方函数,我只需要从时间戳返回的日期,而不是小时和秒。使用下面的代码,我得到-

private String toDate(long timestamp) {
        Date date = new Date (timestamp * 1000);
        return DateFormat.getInstance().format(date).toString();
}

这是我得到的输出。

11/4/01 11:27 PM

但我只需要这样的日期

2001-11-04

有什么建议么?

4

4 回答 4

21

请改用 SimpleDateFormat:

private String toDate(long timestamp) {
    Date date = new Date(timestamp * 1000);
    return new SimpleDateFormat("yyyy-MM-dd").format(date);
}

更新:Java 8 解决方案:

private String toDate(long timestamp) {
    LocalDate date = Instant.ofEpochMilli(timestamp * 1000).atZone(ZoneId.systemDefault()).toLocalDate();
    return date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
于 2012-07-10T20:43:33.957 回答
2

您可以使用此代码获得所需的结果

protected Timestamp timestamp = new Timestamp(Calendar.getInstance().getTimeInMillis());


protected String today_Date=timestamp.toString().split(" ")[0];
于 2016-12-13T11:07:16.283 回答
1

java.time

java.util日期时间 API 及其格式化 API已SimpleDateFormat过时且容易出错。建议完全停止使用它们并切换到现代 Date-Time API *

另外,下面引用的是来自Joda-Time主页的通知:

请注意,从 Java SE 8 开始,用户被要求迁移到 java.time (JSR-310) - JDK 的核心部分,它取代了这个项目。

使用java.time现代日期时间 API 的解决方案:

您可以使用Instant#ofEpochSecondto get a Instantout of the given timestamp,然后使用LocalDate.ofInstantto get a LocalDateout of the getting Instant

演示:

import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(toDate(1636120105L));
    }

    static LocalDate toDate(long timestamp) {
        return LocalDate.ofInstant(Instant.ofEpochSecond(timestamp), ZoneId.systemDefault());
    }
}

输出:

2021-11-05

ONLINE DEMO

从Trail: Date Time了解有关现代日期时间 API 的更多信息。检查此答案此答案以了解如何将java.timeAPI 与 JDBC 一起使用。


* 如果您正在为一个 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请通过 desugaring 检查可用的 Java 8+ API。请注意,Android 8.0 Oreo 已经提供java.time.

于 2021-11-05T13:55:46.440 回答
0

乔达时间

Joda-Time库提供了一个LocalDate类来表示没有任何时间或时区的仅日期值。

时区

确定日期需要时区。巴黎午夜刚过的时刻意味着比蒙特利尔同一时刻早一天的日期。如果您忽略指定时区,则会应用 JVM 当前的默认时区——可能不是您想要的,因为结果可能会有所不同。

示例代码

long millisecondsSinceUnixEpoch = ( yourNumberOfSecondsSinceUnixEpoch * 1000 ); // Convert seconds to milliseconds.
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
LocalDate localDate = new LocalDate( millisecondsSinceUnixEpoch, timeZone );
String output = localDate.toString(); // Defaults to ISO 8601 standard format, YYYY-MM-DD.

前一天

按照评论中的要求获得前一天。

LocalDate dayBefore = localDate.minusDays( 1 );

转换为 juDate

应该避免使用 java.util.Date 和 .Calendar 类,因为它们是出了名的麻烦。但如果需要,您可以转换。

java.util.Date date = localDate.toDate(); // Time-of-day set to earliest valid for that date.
于 2014-09-19T07:37:24.340 回答