#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()
) уже в миллисекундах.