0

问题:

我需要在 SQLITE 数据库(Android)中保存时间戳并从中提取日期。哪个是最好的方法LocalDateTimeInstant.now()?因为这个 Android 应用程序正在沙特阿拉伯使用。

要求:

我必须查询 Timestamp 列以获取在 DB 中输入的第一个 Timestamp 并从中单独提取日期以将其与当前日期进行比较,以检查日差是否超过 30 天。

需要帮助:

  1. 最好的两个LocalDateTimeInstant.now()
  2. 如何从最好的方式中单独提取日期。感谢帮助。

到目前为止完成:

我曾经LocalDateTime保存时间戳,但不确定如何仅从中提取日期。

4

2 回答 2

1

您可以使用它(适用于 Api 26+):

String ts = String.valueOf(Instant.now().getEpochSecond());

支持较旧的 Android 版本:

String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));

或者,如果您希望它采用特定的日期格式,请使用:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String millisInString  = dateFormat.format(new Date());
于 2020-08-27T07:52:05.897 回答
0

以下是您所要求的全部内容:

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;

public class Main {
    public static void main(String[] args) {
        // The current moment at UTC time-scale
        Instant now = Instant.now();
        System.out.println(now);

        // The number of milliseconds from the epoch of 1970-01-01T00:00:00Z.
        long millis = now.toEpochMilli();
        System.out.println(millis);

        // The number of seconds from the Java epoch of 1970-01-01T00:00:00Z.
        long seconds = now.getEpochSecond();
        System.out.println(seconds);

        // Zone ID of Saudi Arabia
        ZoneId zoneId = ZoneId.of("Asia/Riyadh");

        // Get ZonedDateTime from Instant
        ZonedDateTime zdt = now.atZone(zoneId);
        System.out.println(zdt);

        // Get the LocalDateTime part of this ZonedDateTime
        LocalDateTime ldt = zdt.toLocalDateTime();
        System.out.println(ldt);

        // Get the LocalDate part of this ZonedDateTime
        LocalDate today = zdt.toLocalDate();
        System.out.println(today);

        // An instant in the past
        Instant past = LocalDateTime.of(LocalDate.of(2020, Month.APRIL, 10), LocalTime.MIDNIGHT)
                .toInstant(ZoneOffset.ofHours(3));// Zone Offset of Saudi Arabia is UTC +3
        System.out.println(past);

        // No. of months
        long months = ChronoUnit.MONTHS.between(past.atZone(zoneId), zdt);
        System.out.println(months);
    }
}

输出:

2020-08-27T08:45:31.927452Z
1598517931927
1598517931
2020-08-27T11:45:31.927452+03:00[Asia/Riyadh]
2020-08-27T11:45:31.927452
2020-08-27
2020-04-09T21:00:00Z
4
于 2020-08-27T08:29:44.013 回答