Как изменить часовой пояс в Mirth?

Я новичок в Mirth, пытающийся изменить часовой пояс, указанный в исходящих сообщениях. В настоящее время Мирт ставит отметку о текущем времени в сообщениях — только по среднему времени по Гринвичу. Я хочу помечать сообщения центральным временем США.

Вот код преобразователя, добавляющего даты: var dateString = DateUtil.getCurrentDate("ггггММддЧЧммсс"); tmp['MSH']['MSH.7']['MSH.7.1'] = dateString ;

У меня есть несколько вопросов о том, как это решить:

  1. Есть ли способ изменить часовой пояс из веселья?
  2. Если нет, есть ли способ изменить часовой пояс по умолчанию в Java?

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


person bernie2436    schedule 16.09.2011    source источник


Ответы (4)


Вы можете получить доступ к базовым классам Java, поэтому нет необходимости изобретать велосипед для преобразования часовых поясов...

function getCurrentLocalTimestamp() {
   var formatter = new Packages.java.text.SimpleDateFormat("yyyyMMddhhmmss"); 
   // your local TZ
   formatter.setTimeZone(Packages.java.util.TimeZone.getTimeZone("EST")); 
   return formatter.format(new Packages.java.util.Date()); 
}

tmp['MSH']['MSH.7']['MSH.7.1'] = getCurrentLocalTimestamp();
person dividius    schedule 07.03.2012

Это отформатирует дату в JavaScript. Это не очень эффективно, но логику форматирования можно поместить в более общее место, чтобы она стала общедоступной.

Исходный код для форматирования даты взят отсюда: http://jacwright.com/projects/javascript/date_format/

// Simulates PHP's date function
Date.prototype.format = function(format) {
    var returnStr = '';
    var replace = Date.replaceChars;
    for (var i = 0; i < format.length; i++) {       var curChar = format.charAt(i);         if (i - 1 >= 0 && format.charAt(i - 1) == "\\") {
            returnStr += curChar;
        }
        else if (replace[curChar]) {
            returnStr += replace[curChar].call(this);
        } else if (curChar != "\\"){
            returnStr += curChar;
        }
    }
    return returnStr;
};

Date.replaceChars = {
    shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    longMonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
    longDays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],

    // Day
    d: function() { return (this.getDate() < 10 ? '0' : '') + this.getDate(); },
    D: function() { return Date.replaceChars.shortDays[this.getDay()]; },
    j: function() { return this.getDate(); },
    l: function() { return Date.replaceChars.longDays[this.getDay()]; },
    N: function() { return this.getDay() + 1; },
    S: function() { return (this.getDate() % 10 == 1 && this.getDate() != 11 ? 'st' : (this.getDate() % 10 == 2 && this.getDate() != 12 ? 'nd' : (this.getDate() % 10 == 3 && this.getDate() != 13 ? 'rd' : 'th'))); },
    w: function() { return this.getDay(); },
    z: function() { var d = new Date(this.getFullYear(),0,1); return Math.ceil((this - d) / 86400000); }, // Fixed now
    // Week
    W: function() { var d = new Date(this.getFullYear(), 0, 1); return Math.ceil((((this - d) / 86400000) + d.getDay() + 1) / 7); }, // Fixed now
    // Month
    F: function() { return Date.replaceChars.longMonths[this.getMonth()]; },
    m: function() { return (this.getMonth() < 9 ? '0' : '') + (this.getMonth() + 1); },
    M: function() { return Date.replaceChars.shortMonths[this.getMonth()]; },
    n: function() { return this.getMonth() + 1; },
    t: function() { var d = new Date(); return new Date(d.getFullYear(), d.getMonth(), 0).getDate() }, // Fixed now, gets #days of date
    // Year
    L: function() { var year = this.getFullYear(); return (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)); },   // Fixed now
    o: function() { var d  = new Date(this.valueOf());  d.setDate(d.getDate() - ((this.getDay() + 6) % 7) + 3); return d.getFullYear();}, //Fixed now
    Y: function() { return this.getFullYear(); },
    y: function() { return ('' + this.getFullYear()).substr(2); },
    // Time
    a: function() { return this.getHours() < 12 ? 'am' : 'pm'; },
    A: function() { return this.getHours() < 12 ? 'AM' : 'PM'; },
    B: function() { return Math.floor((((this.getUTCHours() + 1) % 24) + this.getUTCMinutes() / 60 + this.getUTCSeconds() / 3600) * 1000 / 24); }, // Fixed now
    g: function() { return this.getHours() % 12 || 12; },
    G: function() { return this.getHours(); },
    h: function() { return ((this.getHours() % 12 || 12) < 10 ? '0' : '') + (this.getHours() % 12 || 12); },
    H: function() { return (this.getHours() < 10 ? '0' : '') + this.getHours(); },
    i: function() { return (this.getMinutes() < 10 ? '0' : '') + this.getMinutes(); },
    s: function() { return (this.getSeconds() < 10 ? '0' : '') + this.getSeconds(); },
    u: function() { var m = this.getMilliseconds(); return (m < 10 ? '00' : (m < 100 ?
'0' : '')) + m; },
    // Timezone
    e: function() { return "Not Yet Supported"; },
    I: function() { return "Not Yet Supported"; },
    O: function() { return (-this.getTimezoneOffset() < 0 ? '-' : '+') + (Math.abs(this.getTimezoneOffset() / 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() / 60)) + '00'; },
    P: function() { return (-this.getTimezoneOffset() < 0 ? '-' : '+') + (Math.abs(this.getTimezoneOffset() / 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() / 60)) + ':00'; }, // Fixed now
    T: function() { var m = this.getMonth(); this.setMonth(0); var result = this.toTimeString().replace(/^.+ \(?([^\)]+)\)?$/, '$1'); this.setMonth(m); return result;},
    Z: function() { return -this.getTimezoneOffset() * 60; },
    // Full Date/Time
    c: function() { return this.format("Y-m-d\\TH:i:sP"); }, // Fixed now
    r: function() { return this.toString(); },
    U: function() { return this.getTime() / 1000; }
};

var myDate = new Date();
tmp['MSH']['MSH.7']['MSH.7.1'] = myDate.format('YmdHis');
person Mike Stonis    schedule 16.09.2011
comment
Спасибо! Но есть ли способ изменить базовый часовой пояс в Java/Mirth - или мне просто нужно фиксировать дату с помощью javascript каждый раз, когда я отмечаю сообщение? - person bernie2436; 19.09.2011
comment
Я не верю, что вы вообще можете изменить часовой пояс. Java по умолчанию всегда будет сообщать дату и время в формате UTC. Изменение часового пояса на вашем компьютере не поможет решить эту проблему. К сожалению, изменение времени в контексте сообщения может быть лучшим путем. Кроме того, многие из систем, которые я интегрирую со временем запроса, должны сообщаться как UTC, поскольку это устраняет любую двусмысленность, вызванную часовыми поясами. - person Mike Stonis; 19.09.2011

Mirth работает под управлением Java, которая, в свою очередь, получает свой часовой пояс от системы, в которой она работает. Таким образом, вы можете изменить часовой пояс, обновив часовой пояс на сервере, на котором он работает.

Если это не вариант, то dividius предоставил хорошие инструкции по изменению вашего часового пояса с помощью классов Java.

person Freiheit    schedule 07.03.2012

Вы можете отредактировать соответствующий файл *.vmoptions, включив в него

-Duser.timezone=America/Chicago

Для моей системы мы используем для этого mcservice.vmoptions. Чтобы увидеть свой выбор часового пояса Java, вы можете запросить java

java.util.TimeZone#getAvailableIDs() 

или вы можете посмотреть здесь: https://garygregory.wordpress.com/2013/06/18/what-are-the-java-timezone-ids/

В зависимости от того, где вы находитесь, вам может потребоваться избегать использования CST или CDT, потому что они являются абсолютными значениями, которые не будут гибко конвертироваться при переходе на летнее время и обратно, как в Америке/Чикаго.

http://www.mirthproject.org/community/forums/showthread.php?t=4949

person GrnMtnBuckeye    schedule 24.03.2017