Запросите записи календаря Lotus Domino независимо от локали даты - PullRequest
1 голос
/ 16 февраля 2012

У меня есть код Java, который запрашивает записи календаря с сервера Lotus Notes Domino (на основе диапазона дат начала и окончания).Ниже приведена упрощенная версия кода.

При запросе к серверу Domino, который форматирует даты так же, как локальный клиент, все в порядке, например, и сервер, и клиент используют формат m / d / y.Однако, если сервер и клиент используют разные форматы (например, сервер с американским форматированием m / d / y и клиент с немецким форматированием d / m / y), то будет найдено неправильное число записей Lotus Notes.

Это потому, что я конвертирую даты в локальные строки с помощью getLocalTime (), а затем создаю диапазон дат с помощью @TextToTime ().

Есть ли способ узнать, какой формат даты используется серверомиспользует?Или есть способ полностью избежать преобразования даты в строку?Я хотел бы передать два объекта Lotus DateTime и позволить серверу декодировать их по мере необходимости.

import lotus.domino.*;


Session session = NotesFactory.createSession((String)null, (String)null, password);

Database db = session.getDatabase(dominoServer, mailfile, false);

// Get our start and end query dates in Lotus Notes format. We will query
// using the localized format for the dates.
lotus.domino.DateTime minStartDateLN = session.createDateTime(minStartDate);
lotus.domino.DateTime maxEndDateLN = session.createDateTime(maxEndDate);

// Query Lotus Notes to get calendar entries in our date range. 
// Here is an overview of this SELECT:
//   @IsAvailable(CalendarDateTime) is true if the LN document is a calendar entry
//   @Explode splits a string based on the delimiters ",; "
//   The operator *= is a permuted equal operator. It compares all entries on
//   the left side to all entries on the right side. If there is at least one
//   match, then true is returned. Explode is used because the CalendarDateTime
//   field can have many dates separated by ";" (e.g. for recurring meetings).
String calendarQuery = "SELECT (@IsAvailable(CalendarDateTime) & (@Explode(CalendarDateTime) *= @Explode(@TextToTime(\""
+ minStartDateLN.getLocalTime()
+ "-" + maxEndDateLN.getLocalTime() + "\"))))";

DocumentCollection queryResults = db.search(calendarQuery);

Ответы [ 3 ]

1 голос
/ 26 февраля 2012

Попробуйте отформатировать дату, которую вы ищете - так, чтобы это был общий формат во всех местах: @TextToTime (@Text (CalendarDateTime))

Другая идея - использовать такой инструмент, как ScanEZ от Ytria дляпросмотреть все поля / данные в записях календаря.Поверьте, есть поле, в котором будут сохранены даты в общем формате, по которому вы можете искать.

1 голос
/ 17 февраля 2012

Вы можете извлечь отдельные значения года, месяца, дня, часа, минуты и секунды из минимальных и максимальных значений, используя методы Java или Lotus DateTime, а затем построить даты в своем запросе с помощью @Date (year,месяц, день, час, минута, секунда)

0 голосов
/ 06 марта 2012

Существует способ найти формат даты на сервере Domino с помощью класса Java lotus.domino.International (он же класс NotesInternational).Вот окончательный рабочий код.

import lotus.domino.*;

Session session = NotesFactory.createSession((String)null, (String)null, password);

Database db = session.getDatabase(dominoServer, mailfile, false);

String strDateFormat;
// Get the date separator used on the Domino server, e.g. / or -
String dateSep = session.getInternational().getDateSep();

// Determine if the server date format is DMY, YMD, or MDY
if (session.getInternational().isDateDMY()) {
    strDateFormat = "dd" + dateSep + "MM" + dateSep + "yyyy";                
}
else if (session.getInternational().isDateYMD()) {
    strDateFormat = "yyyy" + dateSep + "MM" + dateSep + "dd";
}
else {
    strDateFormat = "MM" + dateSep + "dd" + dateSep + "yyyy";
}

DateFormat dateFormat = new SimpleDateFormat(strDateFormat);


String calendarQuery = "SELECT (@IsAvailable(CalendarDateTime) & (@Explode(CalendarDateTime) *= @Explode(@TextToTime(\"" +
    dateFormat.format(startDate) + " - " + dateFormat.format(endDate) + "\"))))";

DocumentCollection queryResults = db.search(calendarQuery); 
...