0

Я попытался добавить дату в таблицу Google. Чтобы добавить дату, мы конвертировали дату в эпоху.Java Epoch Date для Google SpreadSheet

Для Spreadsheet эпохи

Google Sheets использует форму даты эпохи, которая обычно используется в электронных таблицах. Целая часть значения (слева от десятичной) учитывает дни с 30 декабря 1899 года. Дробная часть (справа от десятичной) считает время как долю одного дня. Например, 1 января 1900 года в полдень было 2,5, 2, потому что через два дня после 30 декабря 1899 года и 0,5, поскольку полдень составляет полдня. 1 февраля 1900 года в 15:00 будет 33,625.

Мы используем API времени Joda для расчета. (Наша версия 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()); 
} 

Мы сталкиваемся проблемой найти фракционную часть номера эпохи

ответ

3

Одним из вариантов были бы принять «миллисекунды с началом эпохи 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 Время для участия в этом деле. (Когда вы сделать хотите использовать Joda время, я настоятельно советую избежать Mutable* типов. И только использовать DateTime, когда есть действительно временная зона участвует ...)

+0

Спасибо за очень быстрый ответ. Все вычисления работают отлично, если мы просто удалим минус пение от -2209161600000L. Дата будет рассчитана с 1899 года DEC 30, так что мы только что добавили с Unix Epoch. –

+0

@GauravAshara: Или вычтите константу вместо ее добавления ... в любом случае, это будет работать, конечно. Я изменил ответ соответственно. –

+0

: Да, конечно. благодаря –