Вход в личный кабинет:

Забыли пароль? | Регистрация

Адреса компании:

Санкт-Петербург

196158, Санкт-Петербург,
Пулковское шоссе, д. 30,
корп. 4, Лит. А, офис 203

Тел: +7 812 414 95 41

Москва

129085, г. Москва, проезд Ольминского, д. 3а, стр. 3, офис 706

Тел: +7 495 616 00 53

Блог

26.08.2015

Progress OpenEdge: промышленные средства репликации данных в Oracle и MS-SQL

Progress OpenEdge Pro2 Replication

Читать далее →




Десять причин перехода на новые версии OpenEdge (Progress)


Полезные мелочи (по материалам PEG). Преобразование даты

Вернуться к списку постов

24.01.2013

Полезные мелочи (по материалам PEG)

Одним из важных источников информации по использованию OpenEdge уже много лет является Progress Email Group (PEG, www.peg.com).

К сожалению, в настоящее время PEG не ведет архива, количество сообщений достаточно велико, и нужную информацию бывает трудно найти, даже если у Вас имеется собственный архив почтовых сообщений PEG.

Мы считаем, что имеет смысл публиковать решения некоторых интересных проблем, обсуждавшихся в PEG, на нашем сайте. Первая публикация посвящена одной из проблем преобразования даты.

Преобразование даты

Вопрос: Во входных данных имеется дата в формате «12-jan-2012» , как сохранить ее в поле типа DATE?.

Такая проблема часто возникает при импорте данных, например, из файлов Excel. Заметим также, что указанный формат не единственно возможный. Скажем, тот же Excel предлагает почти два десятка способов форматирования даты

Ответы:

Alon Blich:

Скачайте библиотеку http://www.oehive.org/project/lib

Код:

{slib/slibdate.i}

define var tDate        as date no-undo.

define var iMTime       as int no-undo.

define var iTimeZone    as int no-undo.

run date_str2date(

input   «12-jan-2012»,

input   «d-mmm-yyyy»,

output  tDate,

output  iMTime,

output  iTimeZone ).

message tDate view-as alert-box.


Alon является разработчиком ряда очень полезных библиотек, доступных на www.oehive.org. Естественно, он рекомендует воспользоваться его разработкой. Библиотека, к сожалению, рассчитана на работу только с английским языком. В ней предусмотрены закомментированные блоки кода для обработки локального языка, но при этом Вам придется вручную отредактировать файл (и потерять при этом функциональность для английского языка).

Следующие два примера предлагают реализацию преобразования путем написания собственного кода. Приведенные примеры легко могут быть реализованы в виде пользовательских функций и включены в библиотеку Вашей разработки. Особенно если не задаваться целью написать универсальный код для всех возможных форматов.

Kandavel Elangovan:

def var lc-mon as char no-undo initial

«jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec».

def var ld-date as date no-undo initial ?.

def var lc-date as char no-undo.

lc-date = «21-oct-2012».

ld-date = date(replace(replace(lc-date,entry(2,lc-date,»-«),string(lookup(entry(2,lc-date,»-«),lc-mon))),»-«,»/»)).

display ld-date.


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

Этот код предполагает, что формат даты в сессии: “dmy”, эта проблема устранена в следующей слегка модифицированной версии, как рекомендовано Dan Skinner.

Dan Skinner:

def var lc-mon as char no-undo initial

«jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec».

def var ld-date as date no-undo initial ? format «99/99/9999».

def var lc-date as char no-undo format «x(20)».

def var lc-tmp as char format «x(20)».

lc-date = «21-oct-2012».

lc-tmp =  (replace(replace(lc-date,entry(2,lc-date,»-«),

string(lookup(entry(2,lc-date,»-«),lc-mon))),»-«,»/»)).

ld-date = date(int(entry(2,lc-tmp,»/»)),

int(entry(1,lc-tmp,»/»)),

int(entry(3,lc-tmp,»/»))).

display lc-date lc-tmp ld-date.


И наконец, если Вы используете версию OpenEdge 10+, Вы можете воспользоваться следующим элегантным решением (к сожалению, только при работе в Windows).

Thomas Bergman:

DEF VAR c AS CHAR.

DEF VAR d AS DATE.

c = «12-Jan-2012».

d = System.DateTime:Parse(c).

MESSAGE d

VIEW-AS ALERT-BOX.


Этот код должен работать практически для любого допустимого формата даты. В частности, даты в форматах

c = «12-янв-2012».

c = «Март 2012, 15».

c = «12 Марта 2012».

c = «12 Марта 2012 г.».

преобразуются корректно.


А может, у Вас есть собственное решение этой проблемы? Ждем Ваших комментариев!


И – продолжение следует!..


Добавить свой комментарий

Ваше имя*:
Ваш E-mail*:
Ваш комментарий*:

Компьютерные системы для бизнеса
© 2010 - 2017 Все права на материалы, находящиеся на этом сайте, охраняются в соответствии с законодательством РФ, в том числе, об авторском праве и смежных правах. При любом использовании материалов сайта ссылка на источник обязательна.