Преобразовать эпоху GMT в CST

#javascript #timezone #epoch #gmt

#javascript #Часовой пояс #эпоха #gmt

Вопрос:

Я пытаюсь преобразовать время GMT, которое хранится как epoch, в CST.

Ниже приведен текущий код, который я запускаю на java.

         if (originalRFC.get("sysmodtime")!=null){    
        var sysmod = originalRFC.get("sysmodtime");                                 // Hold the sysmodtime value in a variable

        logger.debug('Sysmodtime Before: '   sysmod);                               // Output to log before before converstion to CST - (in GMT)

        var format = new java.text.SimpleDateFormat("MMMM d, yyyy HH:mm:ss a z");   // Format the string will be in        
        var dateString = sysmod.toLocaleString();                                   // Convert the epoch to the string equivalent in CST 
        var parsedDate = format.parse(dateString);                                  // Convert that CST String back to epoch 
        var sysmodConvert = parsedDate.getTime();                                   // Convert it to time and milliseconds

        logger.debug('Sysmodtime After: '   sysmodConvert);                                 //Output to log after conversion to CST

        genericRFC.setField("last-update-time",sysmodConvert);
}
  

Посмотрите на приведенные ниже ошибки, которые возвращаются в журнале, мы можем видеть время до «1301382996000», и оно прерывается, когда я пытаюсь преобразовать:

2011-05-02 14:25:49,926 [http-8080-1] sm702-сценарий adapter_convert — Sysmodtime До: 1301382996000 2011-05-02 14:25:49,941 [http-8080-1] сценарий sm702-adapter_convert — Ошибка при вызове функции convert org.apache.bsf.BSFException: ошибка JavaScript: java.text.ParseException: Дата, которую невозможно определить: «[объект JavaObject]»

Комментарии:

1. Какова ваша среда? Я вижу здесь странную смесь Java и JavaScript. Кроме того, как вы хотите использовать преобразованный Date файл, собираетесь ли вы отформатировать его и отобразить пользователю?

Ответ №1:

Предполагая, что под «эпохой» вы имеете в виду временную метку UNIX (секунды, прошедшие с эпохи UNIX), этот формат времени не зависит от часового пояса. То есть ваша временная метка не является UTC, GMT, CST или любым другим часовым поясом. Это всего лишь несколько секунд.

Вы применяете часовые пояса, когда переформатируете временную метку как нечто понятное человеку. В этом случае просто загрузите его в Date объект, и должен использоваться ваш местный часовой пояс.

Ответ №2:

Для начала, toLocaleString() зависит от локали и может отличаться от используемого вами формата (на самом деле это вне вашего контроля).

Во-вторых, если вам известно смещение часового пояса CST, вы всегда можете getTime() добавить смещение и использовать setTime() для его преобразования.
В мире Java есть что-то вроде java.util.Часовой пояс, который может дать вам правильное смещение (использовать getOffset() ) уже в миллисекундах.