0

Google スプレッドシートに日付を追加してみました。日付を追加するには、日付をエポックに変換します。

スプレッドシート エポックの場合

Google スプレッドシートは、スプレッドシートで一般的に使用されるエポック デートの形式を使用します。値の整数部分 (小数点の左側) は、1899 年 12 月 30 日からの日数をカウントします。小数部分 (小数点の右側) は、時間を 1 日の端数としてカウントします。たとえば、1900 年 1 月 1 日の正午は、1899 年 12 月 30 日の 2 日後なので 2.5、正午は半日なので .5 になります。1900 年 2 月 1 日の午後 3 時は 33.625 になります。

計算には Joda time API を使用しています (当社の JDK バージョン 1.7)。

整数については、以下のコードを使用します。

public static double getEpochDate(Date inputDate)
{

    MutableDateTime epoch = new MutableDateTime();
    epoch.setTime(0, 0, 0, 0);
    epoch.setDate(1899,12,30); //Set to Epoch time
    System.out.println(epoch);
    DateTime now = new DateTime(inputDate);
    Days days = Days.daysBetween(epoch, now);


    return Double.valueOf(days.getDays());
}

エポック番号の派閥部分を見つける問題に直面しています

4

1 に答える 1

5

1 つのオプションは、「Unix エポックからのミリ秒」の値を取得し (たとえば、 を使用Date.getTime())、それをオフセットして「シート エポックからのミリ秒」を取得し、24 時間で浮動小数点除算を実行することです。このようなもの:

// Precomputed difference between the Unix epoch and the Sheets epoch.
private static final long SHEETS_EPOCH_DIFFERENCE = -2209161600000L;

public static double getEpochDate(Date date)
{
    long millisSinceUnixEpoch = date.getTime();
    long millisSinceSheetsEpoch = millisSinceUnixEpoch - SHEETS_EPOCH_DIFFERENCE;
    return millisSinceSheetsEpoch / (double) TimeUnit.DAYS.toMillis(1);
}

Joda Time がこのケースに関与する必要はありません。( Joda Time を使用たい場合は、型を避けることを強くお勧めします。また、本当にタイムゾーンが関係している場合にMutable*のみ使用してください...)DateTime

于 2016-06-24T14:35:23.020 に答える