|
Accueil → WINDEV 25 → Como trabalhar com data e hora no WX (Windev, Webdev e Windev Mobile) igual ao manuseio de data e hora no Clarion? |
Como trabalhar com data e hora no WX (Windev, Webdev e Windev Mobile) igual ao manuseio de data e hora no Clarion? |
Débuté par Boller, 02 nov. 2024 09:19 - 7 réponses |
| |
| | | |
|
| |
Membre enregistré 3 759 messages |
|
Posté le 02 novembre 2024 - 09:19 |
Aqui estão três procedures em WLanguage que replicam o comportamento das funções de manipulação de data, hora e data-hora do Clarion, como descrito anteriormente.
Essas procedures permitem criar datas e horas específicas, calcular diferenças entre datas e formatar a saída, replicando a abordagem do Clarion.
1. Procedure para Manipulação de Datas
A procedure DateDifference() calcula a diferença em dias entre uma data fornecida e a data atual.
PROCEDURE DateDifference(Year, Month, Day) // Parâmetros: Ano, Mês, Dia da data a ser calculada
// Definindo a data alvo TargetDate is Date = DateBuild(Year, Month, Day) // Obtendo a data de hoje TodayDate is Date = Today()
// Calculando a diferença em dias DifferenceInDays is int = TodayDate - TargetDate
// Exibindo o resultado Info("Dias desde " + DateToString(TargetDate, "DD/MM/YYYY") + ": " + DifferenceInDays) RESULT DifferenceInDays
Uso da Procedure:
DateDifference(2023, 11, 1) // Exibe o número de dias desde 1º de novembro de 2023
2. Procedure para Manipulação de Horas
A procedure TimeDifference() calcula a diferença em minutos entre uma hora específica e a hora atual.
PROCEDURE TimeDifference(Hours, Minutes, Seconds) // Parâmetros: Hora, Minuto, Segundo da hora a ser calculada
// Definindo o tempo alvo TargetTime is Time = TimeBuild(Hours, Minutes, Seconds) // Obtendo o horário atual CurrentTime is Time = Now()
// Calculando a diferença em segundos e convertendo para minutos DifferenceInMinutes is int = (CurrentTime - TargetTime) / 100
// Exibindo o resultado Info("Diferença de minutos desde " + TimeToString(TargetTime, "HH:MM:SS") + ": " + DifferenceInMinutes) RESULT DifferenceInMinutes
Uso da Procedure:
TimeDifference(14, 30, 0) // Exibe a diferença em minutos desde 14:30:00 até o horário atual
3. Procedure para Manipulação de Data e Hora Combinadas
A procedure DateTimeDifference() calcula a diferença em horas entre uma data e hora fornecida e a data-hora atual.
PROCEDURE DateTimeDifference(Year, Month, Day, Hours, Minutes, Seconds) // Parâmetros: Ano, Mês, Dia, Hora, Minuto, Segundo da data e hora a ser calculada
// Definindo a data e hora alvo TargetDateTime is DateTime = DateTimeBuild(Year, Month, Day, Hours, Minutes, Seconds) // Obtendo a data e hora atuais CurrentDateTime is DateTime = Now()
// Calculando a diferença em horas DifferenceInHours is real = DateDifference(CurrentDateTime, TargetDateTime, Hour)
// Exibindo o resultado Info("Diferença em horas desde " + DateTimeToString(TargetDateTime, "DD/MM/YYYY HH:MM:SS") + ": " + DifferenceInHours) RESULT DifferenceInHours
Uso da Procedure:
DateTimeDifference(2023, 11, 1, 14, 30, 0) // Exibe a diferença em horas desde 1º de novembro de 2023, 14:30:00
Resumo das Procedures
• DateDifference() calcula a diferença em dias entre uma data fornecida e a data atual. • TimeDifference() calcula a diferença em minutos entre uma hora fornecida e a hora atual. • DateTimeDifference() calcula a diferença em horas entre uma data e hora fornecida e a data-hora atual.
Essas procedures simulam a manipulação de data e hora que você viu no Clarion, mas usando WLanguage para integrar a funcionalidade com os recursos nativos da linguagem WX.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 759 messages |
|
Posté le 02 novembre 2024 - 09:23 |
Existe algumas considerações e melhorias que podem ser aplicadas às procedures para manipulação de datas e horas em WLanguage, inspirando-se ainda mais no funcionamento do Clarion. Abaixo estão alguns recursos adicionais e práticas recomendadas que podem aprimorar essas procedures para facilitar ainda mais o uso e aumentar a precisão nos cálculos.
1. Considerar Diferentes Unidades de Tempo para a Procedure de Diferença de Datas
No exemplo atual, DateDifference() retorna a diferença em dias. Podemos modificar essa procedure para permitir o cálculo de diferença em anos, meses, semanas ou dias, o que a tornaria mais versátil.
Modificação da Procedure DateDifference() para Suportar Unidades
PROCEDURE DateDifference(Year, Month, Day, Unit is string = "DAYS") // Parâmetros: Ano, Mês, Dia da data a ser calculada, Unidade ("YEARS", "MONTHS", "WEEKS", "DAYS")
// Definindo a data alvo TargetDate is Date = DateBuild(Year, Month, Day) TodayDate is Date = Today()
// Calculando a diferença de acordo com a unidade SWITCH Unit CASE "YEARS" Difference is int = DateDifference(TodayDate, TargetDate, Year) CASE "MONTHS" Difference is int = DateDifference(TodayDate, TargetDate, Month) CASE "WEEKS" Difference is int = (TodayDate - TargetDate) / 7 CASE "DAYS" Difference is int = TodayDate - TargetDate OTHERWISE Info("Unidade não reconhecida. Use 'YEARS', 'MONTHS', 'WEEKS' ou 'DAYS'.") RETURN -1 END
// Exibindo o resultado Info("Diferença em " + Unit + " desde " + DateToString(TargetDate, "DD/MM/YYYY") + ": " + Difference) RESULT Difference
Uso da Procedure:
DateDifference(2023, 11, 1, "MONTHS") // Retorna a diferença em meses desde 1º de novembro de 2023
2. Adicionar Validação de Entrada para Evitar Erros
Adicionar validação para garantir que os valores de entrada (ano, mês, dia, hora, minuto, segundo) estejam dentro de intervalos válidos pode prevenir erros de execução. Por exemplo, verificar se o mês está entre 1 e 12, o dia entre 1 e 31, etc.
Exemplo de Validação de Entrada
PROCEDURE ValidateDateInputs(Year, Month, Day) IF Year < 1800 OR Year > 2100 THEN Info("Ano inválido! Por favor, insira um ano entre 1800 e 2100.") RETURN False END IF Month < 1 OR Month > 12 THEN Info("Mês inválido! Por favor, insira um mês entre 1 e 12.") RETURN False END IF Day < 1 OR Day > 31 THEN Info("Dia inválido! Por favor, insira um dia entre 1 e 31.") RETURN False END RETURN True
Uso da Função de Validação:
IF NOT ValidateDateInputs(2023, 11, 1) THEN RETURN END
Essa validação pode ser incorporada diretamente dentro das procedures de manipulação de data e hora para maior robustez.
3. Adicionar Formatação Flexível para Exibição de Datas e Horas
Para dar mais controle sobre a exibição, as procedures podem incluir um parâmetro de formatação para customizar a saída. Isso pode ser feito com DateToString e TimeToString usando um formato fornecido pelo usuário.
Exemplo com Formato Personalizável
PROCEDURE DisplayDate(DateToDisplay is Date, Format is string = "DD/MM/YYYY") // Exibe a data com o formato especificado Info("Data formatada: " + DateToString(DateToDisplay, Format))
Uso da Procedure:
DisplayDate(Today(), "YYYY-MM-DD") // Exibe a data no formato ISO, por exemplo
4. Procedure para Combinar Data e Hora (Timestamp)
Outra melhoria seria uma procedure que combina uma Date e um Time em um único DateTime. Essa combinação é útil para trabalhar com timestamps e criar registros completos de data e hora.
Exemplo de Procedure CombineDateTime
PROCEDURE CombineDateTime(Year, Month, Day, Hours, Minutes, Seconds) TargetDate is Date = DateBuild(Year, Month, Day) TargetTime is Time = TimeBuild(Hours, Minutes, Seconds)
// Combina a data e a hora CombinedDateTime is DateTime = DateTimeBuild(Year, Month, Day, Hours, Minutes, Seconds)
// Exibindo o resultado Info("Data e hora combinadas: " + DateTimeToString(CombinedDateTime, "DD/MM/YYYY HH:MM:SS")) RESULT CombinedDateTime
Uso da Procedure:
CombineDateTime(2023, 11, 1, 14, 30, 0) // Exibe a data e hora combinadas: 01/11/2023 14:30:00
5. Considerações Adicionais para Manipulação de Fusos Horários
Embora WLanguage e Clarion não incluam nativamente um suporte amplo para fusos horários, é possível integrar APIs externas ou funções adicionais que ajustem a data e hora para o fuso horário local ou UTC. Isso é útil em sistemas distribuídos ou internacionais.
Exemplo Simplificado de Conversão para UTC
PROCEDURE ConvertToUTC(LocalDateTime is DateTime, OffsetHours is int) // Converte o horário local para UTC baseado no deslocamento de horas fornecido
UTCDateTime is DateTime = DateTimeAddHour(LocalDateTime, -OffsetHours) Info("Data e hora em UTC: " + DateTimeToString(UTCDateTime, "DD/MM/YYYY HH:MM:SS")) RESULT UTCDateTime
Uso da Procedure:
ConvertToUTC(Now(), -3) // Considerando um fuso horário de -3 horas, converte para UTC
Resumo
Com essas melhorias e considerações adicionais, as procedures em WLanguage tornam-se ainda mais robustas e próximas ao funcionamento esperado de manipulação de data e hora, proporcionando:
1. Flexibilidade na exibição e cálculos em diferentes unidades de tempo (anos, meses, semanas, dias). 2. Validação de entrada para evitar erros com dados incorretos. 3. Formatos personalizáveis para exibir datas e horas. 4. Combinação de data e hora para criar timestamps completos. 5. Conversão para UTC ou outros fusos horários para casos de uso internacional.
Essas melhorias aprimoram o sistema de data e hora em WLanguage, oferecendo uma experiência mais rica e adaptável para o desenvolvedor, especialmente em sistemas que exigem precisão e manipulação avançada de datas e horários.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modifié, 02 novembre 2024 - 09:26 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 759 messages |
|
Posté le 02 novembre 2024 - 09:27 |
Podemos expandir ainda mais as funcionalidades e tornar o sistema de data e hora em WLanguage mais versátil e próximo ao nível de detalhamento encontrado em sistemas de data/hora como os do Python ou do Clarion. Aqui estão algumas ideias adicionais para enriquecer a experiência de manipulação de datas e horas.
1. Cálculo de Intervalos de Tempo Personalizados (Semanas, Meses, Anos)
Embora já tenhamos implementado a diferenciação em dias, semanas, meses e anos, podemos adicionar uma procedure específica para intervalos complexos, como “quantos dias úteis entre duas datas” ou “quantos finais de semana entre duas datas”.
Exemplo de Procedure para Contar Dias Úteis
PROCEDURE WorkingDaysBetweenDates(StartDate is Date, EndDate is Date) // Calcula o número de dias úteis entre duas datas
nWorkingDays is int = 0 CurrentDate is Date = StartDate
// Loop para contar os dias úteis entre as duas datas WHILE CurrentDate <= EndDate // Verifica se o dia é útil (de segunda a sexta) IF DayOfWeek(CurrentDate) >= 2 AND DayOfWeek(CurrentDate) <= 6 THEN nWorkingDays += 1 END CurrentDate = DateAddDay(CurrentDate, 1) END
Info("Dias úteis entre " + DateToString(StartDate, "DD/MM/YYYY") + " e " + DateToString(EndDate, "DD/MM/YYYY") + ": " + nWorkingDays) RESULT nWorkingDays
Uso da Procedure:
WorkingDaysBetweenDates(DateBuild(2023, 11, 1), DateBuild(2023, 11, 10)) // Conta os dias úteis entre 1 e 10 de novembro de 2023
2. Cálculo de Datas Recorrentes (Recurrence Calculation)
Para sistemas que precisam agendar eventos recorrentes, como tarefas semanais, mensais ou anuais, podemos implementar uma procedure que calcula a próxima data de acordo com a recorrência.
Exemplo de Procedure para Calcular Próxima Data Recorrente
PROCEDURE NextRecurringDate(StartDate is Date, IntervalType is string, IntervalValue is int) // Calcula a próxima data recorrente baseada em um intervalo específico
SWITCH IntervalType CASE "DAYS" NextDate is Date = DateAddDay(StartDate, IntervalValue) CASE "WEEKS" NextDate is Date = DateAddDay(StartDate, IntervalValue * 7) CASE "MONTHS" NextDate is Date = DateAddMonth(StartDate, IntervalValue) CASE "YEARS" NextDate is Date = DateAddYear(StartDate, IntervalValue) OTHERWISE Info("Intervalo não reconhecido. Use 'DAYS', 'WEEKS', 'MONTHS' ou 'YEARS'.") RETURN NullDate() END
Info("Próxima data recorrente: " + DateToString(NextDate, "DD/MM/YYYY")) RESULT NextDate
Uso da Procedure:
NextRecurringDate(DateBuild(2023, 11, 1), "MONTHS", 1) // Calcula a próxima ocorrência mensal a partir de 1º de novembro de 2023
3. Funções de Formatação Personalizada para Datas e Horas
Para facilitar o uso de diferentes formatos, podemos criar uma procedure de formatação personalizada que usa uma string de formato, similar às f-strings do Python. Esta função permite que o usuário passe um formato de data customizado.
Exemplo de Procedure CustomFormatDate
PROCEDURE CustomFormatDate(DateValue is Date, FormatString is string) // Formata a data com base em um string de formato personalizada
FormattedDate is string = DateToString(DateValue, FormatString) Info("Data formatada: " + FormattedDate) RESULT FormattedDate
Uso da Procedure:
CustomFormatDate(Today(), "YYYY-MM-DD") // Exibe a data atual no formato ISO
4. Manipulação de Timezones e Conversão de Fuso Horário
Para sistemas distribuídos, a conversão de fuso horário pode ser essencial. Embora WLanguage não tenha suporte nativo direto para fusos horários, podemos criar um esquema simples para ajustar um horário local para UTC ou vice-versa, baseado em um deslocamento.
Procedure para Ajustar Horário para UTC
PROCEDURE ConvertToUTC(LocalDateTime is DateTime, OffsetHours is int) // Converte um horário local para UTC usando um deslocamento de horas
UTCDateTime is DateTime = DateTimeAddHour(LocalDateTime, -OffsetHours) Info("Data e hora em UTC: " + DateTimeToString(UTCDateTime, "DD/MM/YYYY HH:MM:SS")) RESULT UTCDateTime
Uso da Procedure:
ConvertToUTC(Now(), -3) // Considerando um fuso horário de -3 horas, converte para UTC
5. Adição de Intervalos Complexos (Meses com Variações no Número de Dias)
Em muitas situações, precisamos calcular uma data futura em “n meses” que considera variações de dias entre meses (por exemplo, fevereiro vs. março). Isso pode ser alcançado utilizando o DateAddMonth, que automaticamente ajusta para o último dia do mês, se necessário.
Exemplo de Procedure AddComplexInterval
PROCEDURE AddComplexInterval(StartDate is Date, MonthsToAdd is int) // Adiciona um número específico de meses à data e ajusta automaticamente para o fim do mês
NewDate is Date = DateAddMonth(StartDate, MonthsToAdd) IF Day(StartDate) > Day(NewDate) THEN NewDate = DateBuild(Year(NewDate), Month(NewDate), 0) // Ajusta para o último dia do mês, se necessário END
Info("Data após adição do intervalo: " + DateToString(NewDate, "DD/MM/YYYY")) RESULT NewDate
Uso da Procedure:
AddComplexInterval(DateBuild(2023, 1, 31), 1) // Calcula a data para 1 mês após 31 de janeiro de 2023, ajustando para o último dia de fevereiro
6. Contagem Regressiva de Tempo (Countdown Timer)
Em aplicativos que precisam mostrar uma contagem regressiva, podemos criar uma procedure que exibe o tempo restante até uma data/hora alvo.
Exemplo de Procedure para Contagem Regressiva
PROCEDURE Countdown(TargetDateTime is DateTime) // Exibe a contagem regressiva até uma data e hora alvo
CurrentDateTime is DateTime = Now() TimeRemaining is Duration = TargetDateTime - CurrentDateTime
HoursLeft is int = TimeRemaining / 360000 MinutesLeft is int = (TimeRemaining % 360000) / 6000 SecondsLeft is int = (TimeRemaining % 6000) / 100
Info("Tempo restante: " + HoursLeft + " horas, " + MinutesLeft + " minutos, " + SecondsLeft + " segundos")
Uso da Procedure:
Countdown(DateTimeBuild(2023, 12, 31, 23, 59, 59)) // Exibe o tempo restante até o final do ano
Resumo das Melhorias
Essas funcionalidades adicionais expandem o sistema de manipulação de datas e horas em WLanguage, tornando-o adequado para aplicativos empresariais complexos e sistemas distribuídos. As principais adições incluem:
1. Contagem de dias úteis e intervalos complexos, útil para cálculos de prazos. 2. Recorrências de eventos, essenciais para agendamentos e automação. 3. Formatos customizados de exibição para suportar diferentes necessidades de apresentação. 4. Conversão de fusos horários, para adequação a sistemas globais. 5. Manipulação de meses variáveis para calcular datas sem se preocupar com a quantidade de dias em cada mês. 6. Contagem regressiva, ideal para mostrar o tempo restante até um evento.
Essas melhorias tornam o sistema de data e hora mais flexível e poderoso, atendendo a uma variedade de cenários avançados de negócios e sistemas de planejamento.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 759 messages |
|
Posté le 02 novembre 2024 - 09:43 |
Quando comparamos o tratamento de datas e horas entre Clarion e WLanguage no Windev, há várias áreas que podemos explorar para tornar o WLanguage mais competitivo e abrangente em funcionalidades de manipulação temporal. Aqui estão algumas ideias adicionais e estratégias de integração que poderiam aprimorar o uso de datas e horas no WLanguage, com base nas capacidades do Clarion e outras linguagens com forte suporte a data e hora:
1. Integração com Calendários e Agendas Externas
• Sincronização com Calendários Externos: Criar bibliotecas ou APIs integradas para sincronização com calendários populares, como o Google Calendar e o Outlook, poderia trazer uma funcionalidade essencial para aplicativos empresariais, permitindo que eventos e prazos definidos em aplicativos WX se sincronizem automaticamente com calendários externos. • Biblioteca de Feriados Nacionais e Internacionais: Uma biblioteca nativa que mantenha feriados comuns em diferentes países e regiões, com atualizações automáticas, seria valiosa para sistemas que lidam com datas em contextos internacionais.
2. Suporte a Datas e Horas Complexas (Períodos Fiscais e Comerciais)
• Períodos Fiscais e Comerciais: Muitas empresas precisam de suporte a períodos contábeis específicos, como trimestres, semestres ou exercícios fiscais customizados. Ter funções para calcular e validar essas datas ajudaria sistemas ERP e financeiros a definirem intervalos contábeis de forma eficiente. • Datas de Corte e Ajustes Contábeis: Permitir que desenvolvedores definam datas de corte, em que períodos são congelados ou ajustados automaticamente com base em regras de negócio, pode reduzir a complexidade de sistemas financeiros e contábeis.
3. Manipulação e Ajuste de Fusos Horários Avançada
• Detecção e Aplicação Automática de Fuso Horário: Poder detectar o fuso horário local do usuário e aplicar automaticamente ao exibir dados armazenados em UTC é um recurso comum em sistemas distribuídos. Isso também poderia incluir o ajuste automático para horários de verão, respeitando o histórico de mudanças de fusos horários em diferentes países. • Conversão de Fusos Horários no Banco de Dados: Ao lidar com dados em bancos de dados, a conversão automática de fusos horários no momento das consultas facilitaria o tratamento de registros temporais em sistemas globais.
4. Suporte a Manipulação de Durations (Duração e Intervalos)
• Tipo de Dado Duration para Intervalos: Criar um tipo de dado dedicado a durações (como Duration), que represente intervalos de tempo como “3 horas e 15 minutos”, pode ajudar no cálculo de tempos decorrido sem precisar converter para um formato específico. Isso é útil em aplicações de controle de tempo e logs de auditoria. • Operações Matemáticas com Intervalos: Permitir operações matemáticas com tipos Duration (como soma e subtração de intervalos) simplifica o desenvolvimento de sistemas que dependem de cálculos temporais, como monitoramento de tempo e cronômetros.
5. Armazenamento e Controle de Timestamps Precisos
• Armazenamento de Timestamps em Milissegundos ou Menos: Muitas vezes, é necessário armazenar eventos com uma precisão maior que a padrão de segundos. A adição de suporte para timestamps em milissegundos ou mesmo em nanossegundos pode beneficiar sistemas que lidam com eventos em tempo real. • Controle de Zonas Temporais em Timestamps: Timestamps que contenham o fuso horário no momento do evento (como um carimbo UTC com fuso local) melhoram o histórico e auditabilidade, facilitando a localização exata no tempo e em múltiplos fusos.
6. Funções Avançadas de Manipulação de Intervalos
• Datas Recorrentes com Regras Avançadas: Suporte para intervalos recorrentes complexos, como “toda segunda terça-feira do mês”, “último dia útil do mês”, ou “a cada três dias úteis”, é um recurso avançado útil para sistemas de agendamento e automação. • Intervalos Condicionais: Implementar condições específicas para cálculo de intervalos, como ignorar finais de semana ou feriados, aumentaria a capacidade do WLanguage de lidar com casos de uso de gestão de prazo.
7. Compatibilidade com APIs e Padrões de Data e Hora Internacionais
• Suporte a ISO 8601 e RFC 3339: Padrões como ISO 8601 e RFC 3339 são amplamente usados para armazenamento e intercâmbio de dados em sistemas modernos. Garantir compatibilidade completa para exportação/importação de dados temporais pode simplificar a integração do WLanguage com APIs internacionais. • Conversão para e de Unix Timestamp: Unix timestamps, que representam a quantidade de segundos desde 1º de janeiro de 1970, são um padrão em sistemas de integração. Facilitar a conversão bidirecional para Unix timestamps permitiria interoperabilidade com sistemas Unix e Linux.
8. Ferramentas de Debug e Visualização de Data e Hora
• Visualização Interativa de Data e Hora no Debugger: Adicionar uma visualização interativa para datas e horas durante o debugging, permitindo ao desenvolvedor ver o intervalo de tempo decorrido entre pontos de break, poderia tornar a depuração de sistemas temporais mais precisa e eficiente. • Histórico de Alterações Temporais em Debugging: Poder visualizar as mudanças de data e hora de uma variável ao longo do tempo dentro de uma sessão de depuração ajudaria no entendimento de comportamentos temporais de código.
9. Suporte para Idiomas e Localizações Temporais
• Tradução Automática de Datas e Horas para Idiomas Diferentes: Permitir a exibição de datas em diferentes idiomas e formatos de localização, como “2 de novembro de 2024” em português e “November 2, 2024” em inglês, ajudaria em aplicativos multilíngues e internacionais. • Exibição Contextual de Data e Hora com Localização: Um recurso que exibe automaticamente datas no formato preferido pelo usuário (por exemplo, DD/MM/YYYY para Brasil e MM/DD/YYYY para EUA), ajustando conforme as preferências de idioma e localização, seria ideal para aplicações globais.
10. Biblioteca de Datas Relativas e Cálculo Natural
• Biblioteca de Datas Relativas: Uma biblioteca que permita cálculos naturais, como “um mês atrás”, “próxima segunda-feira”, ou “final do trimestre”, pode simplificar o desenvolvimento de interfaces e melhorar a experiência do usuário ao configurar datas em sistemas empresariais. • Manipulação de Datas Human-Friendly: Funções que convertem datas para descrições amigáveis, como “há 3 dias” ou “em 2 semanas”, tornam as interfaces mais intuitivas e compreensíveis para o usuário final.
Conclusão
Implementar essas funcionalidades no WLanguage tornaria a manipulação de datas e horas significativamente mais flexível, robusta e alinhada com padrões modernos. Estes recursos podem tornar o WLanguage mais adequado para aplicações empresariais, principalmente em cenários internacionais e distribuídos.
Essas ideias fornecem um ponto de partida para futuras melhorias, que poderiam ser organizadas em módulos de data e hora mais especializados ou bibliotecas de manipulação temporal, oferecendo uma experiência rica e poderosa para desenvolvedores WX.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 759 messages |
|
Posté le 02 novembre 2024 - 09:49 |
Sim, podemos adicionar mais alguns comandos úteis para manipulação de data e hora que complementam ainda mais o WLanguage, especialmente para casos específicos de negócios e sistemas complexos. Aqui estão algumas sugestões adicionais:
1. Função para Determinar se uma Data é Feriado
Uma função que verifica se uma data é um feriado (baseada em uma lista predefinida de feriados) pode ser útil para cálculo de prazos. Essa lista pode ser adaptada com feriados fixos e variáveis.
PROCEDURE IsHoliday(DateToCheck is Date) : boolean // Verifica se uma data específica é feriado
// Lista de feriados fixos (exemplo: Ano Novo e Natal) FixedHolidays is array of Date = [DateBuild(2023, 1, 1), DateBuild(2023, 12, 25)] FOR EACH HolidayDate OF FixedHolidays IF DateToCheck = HolidayDate THEN RESULT True END END
// Adicione lógica para feriados móveis, se necessário // (exemplo: cálculo da Páscoa e Carnaval)
// Se não for feriado, retorna False RESULT False
Uso:
IF IsHoliday(DateBuild(2023, 12, 25)) THEN Info("É feriado!") ELSE Info("Não é feriado.") END
2. Função para Próximo Dia Útil
Muitas vezes, precisamos calcular o próximo dia útil a partir de uma data fornecida, excluindo finais de semana e feriados. Isso é útil para prazos e vencimentos.
PROCEDURE NextBusinessDay(StartDate is Date) : Date // Calcula o próximo dia útil, ignorando fins de semana e feriados
NextDate is Date = StartDate REPEAT NextDate = DateAddDay(NextDate, 1) UNTIL DayOfWeek(NextDate) >= 2 AND DayOfWeek(NextDate) <= 6 AND NOT IsHoliday(NextDate)
RESULT NextDate
Uso:
NextDay = NextBusinessDay(DateBuild(2023, 11, 10)) Info("Próximo dia útil: " + DateToString(NextDay, "DD/MM/YYYY"))
3. Função para o Último Dia do Mês
Essa função retorna o último dia do mês para uma data fornecida, útil para fechamento financeiro ou cálculo de prazos mensais.
PROCEDURE LastDayOfMonth(CurrentDate is Date) : Date // Calcula o último dia do mês de uma data especificada
LastDay is Date = DateBuild(Year(CurrentDate), Month(CurrentDate) + 1, 1) - 1 RESULT LastDay
Uso:
EndOfMonth = LastDayOfMonth(DateBuild(2023, 11, 10)) Info("Último dia do mês: " + DateToString(EndOfMonth, "DD/MM/YYYY"))
4. Função para Calcular Semana do Ano
Uma função que retorna o número da semana do ano para uma data fornecida é essencial para muitos relatórios e calendários.
PROCEDURE WeekOfYear(DateValue is Date) : int // Retorna o número da semana do ano
WeekNumber is int = WeekNumber(DateValue) RESULT WeekNumber
Uso:
CurrentWeek = WeekOfYear(DateBuild(2023, 11, 10)) Info("Semana do ano: " + CurrentWeek)
5. Função para Adicionar Semanas a uma Data
Às vezes, é útil adicionar semanas diretamente a uma data, especialmente para cálculos em calendários ou agendamentos.
PROCEDURE DateAddWeeks(BaseDate is Date, Weeks is int) : Date // Adiciona um número específico de semanas a uma data
NewDate is Date = DateAddDay(BaseDate, Weeks * 7) RESULT NewDate
Uso:
DateInFuture = DateAddWeeks(DateBuild(2023, 11, 10), 2) Info("Data em duas semanas: " + DateToString(DateInFuture, "DD/MM/YYYY"))
6. Função para Diferença em Meses entre Datas
Calcular a diferença em meses entre duas datas pode ser útil para sistemas financeiros e de contratos.
PROCEDURE MonthsBetweenDates(StartDate is Date, EndDate is Date) : int // Calcula a diferença em meses entre duas datas
MonthsDifference is int = DateDifference(EndDate, StartDate, Month) RESULT MonthsDifference
Uso:
MonthsDiff = MonthsBetweenDates(DateBuild(2023, 1, 1), DateBuild(2023, 11, 1)) Info("Diferença em meses: " + MonthsDiff)
7. Função para Verificar se um Ano é Bissexto
Uma função para verificar se um ano é bissexto pode ser útil para cálculos de prazos e para ajustar a contagem de dias em fevereiro.
PROCEDURE IsLeapYear(Year is int) : boolean // Verifica se o ano é bissexto
IF Year % 4 = 0 AND (Year % 100 <> 0 OR Year % 400 = 0) THEN RESULT True ELSE RESULT False END
Uso:
IF IsLeapYear(2024) THEN Info("2024 é um ano bissexto.") ELSE Info("2024 não é um ano bissexto.") END
8. Função para Adicionar Dias com Condição de Ignorar Feriados
Essa função adiciona um número de dias a uma data, ignorando feriados e finais de semana, útil para cálculos de prazos em dias úteis.
PROCEDURE AddBusinessDays(StartDate is Date, DaysToAdd is int) : Date // Adiciona dias úteis a uma data, ignorando finais de semana e feriados
CurrentDate is Date = StartDate DaysAdded is int = 0
WHILE DaysAdded < DaysToAdd CurrentDate = DateAddDay(CurrentDate, 1) IF DayOfWeek(CurrentDate) >= 2 AND DayOfWeek(CurrentDate) <= 6 AND NOT IsHoliday(CurrentDate) THEN DaysAdded += 1 END END
RESULT CurrentDate
Uso:
BusinessEndDate = AddBusinessDays(DateBuild(2023, 11, 10), 5) Info("Data após 5 dias úteis: " + DateToString(BusinessEndDate, "DD/MM/YYYY"))
9. Função para Calcular o Primeiro Dia do Mês
Essa função retorna o primeiro dia do mês de uma data fornecida, útil para cálculos de início de período.
PROCEDURE FirstDayOfMonth(CurrentDate is Date) : Date // Calcula o primeiro dia do mês de uma data especificada
FirstDay is Date = DateBuild(Year(CurrentDate), Month(CurrentDate), 1) RESULT FirstDay
Uso:
StartOfMonth = FirstDayOfMonth(DateBuild(2023, 11, 10)) Info("Primeiro dia do mês: " + DateToString(StartOfMonth, "DD/MM/YYYY"))
Resumo
Essas funções adicionais tornam o WLanguage ainda mais completo em relação à manipulação de datas e horas, atendendo a necessidades específicas para sistemas empresariais e financeiros. Aqui está o que cada nova função oferece:
1. Verificação de feriados para datas específicas. 2. Cálculo do próximo dia útil a partir de uma data, excluindo fins de semana e feriados. 3. Último dia do mês, útil para fechamento de períodos. 4. Número da semana do ano, comum em relatórios e sistemas de calendário. 5. Adicionar semanas a uma data de forma simplificada. 6. Diferença em meses entre duas datas, útil para contratos. 7. Verificação de ano bissexto para ajuste de fevereiro. 8. Adição de dias úteis ignorando feriados e fins de semana. 9. Cálculo do primeiro dia do mês para facilitar consultas por períodos.
Essas funções cobrem uma ampla gama de casos de uso comuns e avançados em manipulação de data e hora, proporcionando uma base sólida para aplicações complexas no WLanguage.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 759 messages |
|
Posté le 02 novembre 2024 - 09:52 |
Aqui estão as funções adicionais para manipulação de data e hora que faltavam, completando o conjunto de ferramentas avançadas no WLanguage para suprir as necessidades específicas.
1. Função para Verificar se é Feriado
Esta função verifica se uma data fornecida é um feriado, baseada em uma lista de feriados fixos e móveis.
PROCEDURE IsHoliday(DateToCheck is Date) : boolean // Verifica se uma data específica é feriado
// Lista de feriados fixos (exemplo: Ano Novo e Natal) FixedHolidays is array of Date = [DateBuild(2023, 1, 1), DateBuild(2023, 12, 25)]
// Verificar se a data coincide com um feriado fixo FOR EACH HolidayDate OF FixedHolidays IF DateToCheck = HolidayDate THEN RESULT True END END
// Adicione lógica adicional para feriados móveis, se necessário (ex.: Páscoa)
RESULT False // Se não for feriado, retorna False
Uso:
IF IsHoliday(DateBuild(2023, 12, 25)) THEN Info("É feriado!") ELSE Info("Não é feriado.") END
2. Função para Encontrar o Próximo Dia Útil
Esta função calcula o próximo dia útil a partir de uma data fornecida, excluindo fins de semana e feriados.
PROCEDURE NextBusinessDay(StartDate is Date) : Date // Calcula o próximo dia útil, ignorando finais de semana e feriados
NextDate is Date = StartDate REPEAT NextDate = DateAddDay(NextDate, 1) UNTIL DayOfWeek(NextDate) >= 2 AND DayOfWeek(NextDate) <= 6 AND NOT IsHoliday(NextDate)
RESULT NextDate
Uso:
NextDay = NextBusinessDay(DateBuild(2023, 11, 10)) Info("Próximo dia útil: " + DateToString(NextDay, "DD/MM/YYYY"))
3. Função para Obter o Último Dia do Mês
Esta função retorna o último dia do mês para uma data fornecida.
PROCEDURE LastDayOfMonth(CurrentDate is Date) : Date // Calcula o último dia do mês de uma data especificada
LastDay is Date = DateBuild(Year(CurrentDate), Month(CurrentDate) + 1, 1) - 1 RESULT LastDay
Uso:
EndOfMonth = LastDayOfMonth(DateBuild(2023, 11, 10)) Info("Último dia do mês: " + DateToString(EndOfMonth, "DD/MM/YYYY"))
4. Função para Calcular a Semana do Ano
Esta função retorna o número da semana do ano para uma data fornecida.
PROCEDURE WeekOfYear(DateValue is Date) : int // Retorna o número da semana do ano
WeekNumber is int = WeekNumber(DateValue) RESULT WeekNumber
Uso:
CurrentWeek = WeekOfYear(DateBuild(2023, 11, 10)) Info("Semana do ano: " + CurrentWeek)
5. Função para Adicionar Semanas a uma Data
Esta função adiciona um número específico de semanas a uma data, útil para cálculos de prazo e agendamento.
PROCEDURE DateAddWeeks(BaseDate is Date, Weeks is int) : Date // Adiciona um número específico de semanas a uma data
NewDate is Date = DateAddDay(BaseDate, Weeks * 7) RESULT NewDate
Uso:
DateInFuture = DateAddWeeks(DateBuild(2023, 11, 10), 2) Info("Data em duas semanas: " + DateToString(DateInFuture, "DD/MM/YYYY"))
6. Função para Diferença em Meses entre Duas Datas
Esta função calcula a diferença em meses entre duas datas, útil para contratos e cálculos financeiros.
PROCEDURE MonthsBetweenDates(StartDate is Date, EndDate is Date) : int // Calcula a diferença em meses entre duas datas
MonthsDifference is int = DateDifference(EndDate, StartDate, Month) RESULT MonthsDifference
Uso:
MonthsDiff = MonthsBetweenDates(DateBuild(2023, 1, 1), DateBuild(2023, 11, 1)) Info("Diferença em meses: " + MonthsDiff)
7. Função para Verificar se um Ano é Bissexto
Esta função verifica se um determinado ano é bissexto, útil para ajuste de datas no mês de fevereiro.
PROCEDURE IsLeapYear(Year is int) : boolean // Verifica se o ano é bissexto
IF Year % 4 = 0 AND (Year % 100 <> 0 OR Year % 400 = 0) THEN RESULT True ELSE RESULT False END
Uso:
IF IsLeapYear(2024) THEN Info("2024 é um ano bissexto.") ELSE Info("2024 não é um ano bissexto.") END
8. Função para Adicionar Dias Úteis a uma Data
Essa função adiciona um número de dias úteis a uma data, ignorando finais de semana e feriados.
PROCEDURE AddBusinessDays(StartDate is Date, DaysToAdd is int) : Date // Adiciona dias úteis a uma data, ignorando finais de semana e feriados
CurrentDate is Date = StartDate DaysAdded is int = 0
WHILE DaysAdded < DaysToAdd CurrentDate = DateAddDay(CurrentDate, 1) IF DayOfWeek(CurrentDate) >= 2 AND DayOfWeek(CurrentDate) <= 6 AND NOT IsHoliday(CurrentDate) THEN DaysAdded += 1 END END
RESULT CurrentDate
Uso:
BusinessEndDate = AddBusinessDays(DateBuild(2023, 11, 10), 5) Info("Data após 5 dias úteis: " + DateToString(BusinessEndDate, "DD/MM/YYYY"))
9. Função para Obter o Primeiro Dia do Mês
Esta função retorna o primeiro dia do mês para uma data fornecida.
PROCEDURE FirstDayOfMonth(CurrentDate is Date) : Date // Calcula o primeiro dia do mês de uma data especificada
FirstDay is Date = DateBuild(Year(CurrentDate), Month(CurrentDate), 1) RESULT FirstDay
Uso:
StartOfMonth = FirstDayOfMonth(DateBuild(2023, 11, 10)) Info("Primeiro dia do mês: " + DateToString(StartOfMonth, "DD/MM/YYYY"))
Conclusão
Essas funções adicionais completam o conjunto de funcionalidades avançadas para manipulação de datas e horas em WLanguage, oferecendo:
1. Verificação de feriados 2. Cálculo do próximo dia útil 3. Último dia do mês 4. Número da semana do ano 5. Adição de semanas a uma data 6. Diferença em meses entre datas 7. Verificação de ano bissexto 8. Adição de dias úteis a uma data 9. Primeiro dia do mês
Essas funções fornecem um controle detalhado e flexível de datas e horários para sistemas complexos e empresariais.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 759 messages |
|
Posté le 02 novembre 2024 - 10:09 |
Sim, aqui estão mais algumas dicas e funcionalidades adicionais para garantir uma conversão robusta e para lidar com datas e horas entre Clarion e Windev de maneira eficiente:
1. Verificações de Validade e Tratamento de Erros
• Validação de Intervalos: Ao converter datas e horas, é importante garantir que os valores estão dentro de intervalos válidos para cada sistema. Por exemplo: • As datas em Clarion podem começar em 28 de dezembro de 1800, então qualquer data anterior a essa seria inválida. • As horas Clarion devem estar no intervalo de 0 a 8.640.000 (representando de 00:00:00 a 23:59:59, em centésimos de segundo). • Tratamento de Erros: Adicionar mensagens de erro ou retornos padrão (como NullDate() em Windev) pode evitar que o sistema exiba resultados incorretos em caso de erro na entrada dos dados.
Exemplo de Validação para Data Clarion
PROCEDURE ValidateClarionDate(ClarionDate is int) : boolean // Verifica se uma data Clarion está dentro do intervalo válido
IF ClarionDate < 0 THEN Info("Data Clarion inválida. Deve ser maior ou igual a zero.") RESULT False ELSE RESULT True END
2. Funções para Comparação e Operações de Intervalos
• Comparação de Datas e Horas: Em muitos casos, precisamos comparar datas e horas para verificar se uma é anterior, igual ou posterior à outra. Ao usar datas e horas convertidas entre Clarion e Windev, garanta que ambas estejam no mesmo sistema (ou Clarion ou Windev) antes de fazer comparações. • Cálculo de Intervalos: Funções para calcular intervalos de tempo, como a diferença entre duas datas ou horas em dias, horas ou segundos, podem ser úteis. Isso pode ser feito utilizando o sistema interno de Windev, onde podemos converter datas e horas Clarion para Windev e usar DateDifference e TimeDifference.
3. Função de Conversão Geral (Conversor Bidirecional)
Uma abordagem interessante é criar uma função geral que aceite uma data e/ou hora em qualquer formato e retorne a data e hora no formato especificado (Clarion ou Windev). Essa função poderia verificar automaticamente o tipo de entrada e saída, facilitando a manipulação em diferentes partes do código.
Exemplo de Conversor Bidirecional
PROCEDURE ConvertDateTime(DateValue, TimeValue, TargetFormat is string) : array of int // Converte entre formatos de data e hora (Clarion para Windev ou Windev para Clarion)
ResultArray is array of int
SWITCH TargetFormat CASE "ClarionToWindev" ResultArray[1] = ClarionDateToWindevDate(DateValue) ResultArray[2] = ClarionTimeToWindevTime(TimeValue) CASE "WindevToClarion" ResultArray[1] = WindevDateToClarionDate(DateValue) ResultArray[2] = WindevTimeToClarionTime(TimeValue) OTHERWISE Info("Formato de conversão inválido. Use 'ClarionToWindev' ou 'WindevToClarion'.") END
RESULT ResultArray
Uso:
Result = ConvertDateTime(80375, 360000, "ClarionToWindev") Info("Data Windev: " + Result[1] + ", Hora Windev: " + Result[2])
4. Considerar o Formato para Exportação e Importação de Dados
• Exportação de Dados: Ao exportar datas e horas entre sistemas, usar formatos padronizados, como ISO 8601 (YYYY-MM-DDTHH:MM:SSZ), facilita a interoperabilidade e evita erros de interpretação. • Conversão para Strings: Quando necessário, converta datas e horas para strings formatadas antes da exportação. Isso é especialmente útil em sistemas distribuídos onde os dados de data e hora precisam ser interpretados com precisão em diferentes fusos horários.
5. Conversão de Timestamps (Data e Hora em Unix Timestamp)
• Clarion para Unix Timestamp: É possível converter datas e horas Clarion para um Unix timestamp, útil para integrar com sistemas que utilizam o padrão Unix para datas e horas (segundos desde 1º de janeiro de 1970). • Windev para Unix Timestamp: De forma semelhante, pode-se converter o DateTime do Windev em Unix timestamp para interoperabilidade.
Exemplo: Clarion para Unix Timestamp
PROCEDURE ClarionToUnixTimestamp(ClarionDate is int, ClarionTime is int) : int // Converte data e hora Clarion para Unix Timestamp
BaseUnixDate is DateTime = DateTimeBuild(1970, 1, 1, 0, 0, 0) WindevDateTime is DateTime = ClarionDateTimeToWindevDateTime(ClarionDate, ClarionTime) UnixTimestamp is int = DateDifference(WindevDateTime, BaseUnixDate, Second)
RESULT UnixTimestamp
6. Documentação e Comentários
• Documentação dos Códigos: Ao lidar com funções de conversão de data e hora, é crucial documentar cada função com explicações claras sobre como o cálculo é feito. Isso ajuda desenvolvedores futuros a entenderem rapidamente como o código funciona e a razão para cada etapa da conversão. • Exemplos e Casos de Teste: Inclua exemplos de casos de teste para anos bissextos, datas no início e no fim do intervalo suportado (ex.: 28 de dezembro de 1800 em Clarion), e verifique se as conversões são precisas. Isso ajuda a garantir que a lógica permaneça correta e que quaisquer erros sejam rapidamente identificados.
7. Considerações sobre o Fuso Horário
• Fusos Horários ao Exibir: Em aplicações que envolvem usuários em diferentes fusos, sempre converta datas e horas para o fuso local do usuário ao exibir os dados. • Armazenamento em UTC: Em bancos de dados, geralmente é mais seguro armazenar datas e horas em UTC, realizando conversões apenas na apresentação, para evitar problemas de interpretação e compatibilidade entre diferentes fusos.
Essas dicas adicionais podem melhorar ainda mais a robustez e a interoperabilidade de um sistema que necessita manipular datas e horas entre Clarion e Windev, reduzindo riscos e garantindo maior confiabilidade no tratamento de dados temporais.Não
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 759 messages |
|
Posté le 02 novembre 2024 - 10:14 |
Vamos revisar se todas as funções mencionadas foram realmente implementadas:
Funções de Conversão Entre Clarion e Windev
As principais funções de conversão entre os formatos de data e hora de Clarion e Windev foram implementadas, incluindo:
1. Data Clarion para Data Windev (ClarionDateToWindevDate) 2. Hora Clarion para Hora Windev (ClarionTimeToWindevTime) 3. Data e Hora Clarion para Data e Hora Windev (ClarionDateTimeToWindevDateTime) 4. Data Windev para Data Clarion (WindevDateToClarionDate) 5. Hora Windev para Hora Clarion (WindevTimeToClarionTime) 6. Data e Hora Windev para Data e Hora Clarion (WindevDateTimeToClarionDateTime)
Essas funções cobrem os principais casos de conversão entre datas e horas de Clarion e Windev.
Funções Adicionais Mencionadas
Havia algumas funções adicionais sugeridas que poderiam complementar o sistema, mas ainda não foram implementadas. Estas incluem:
1. Validação de Data Clarion - Uma função para garantir que a data Clarion está em um intervalo válido. 2. Conversor Geral (Conversão Bidirecional) - Uma função que aceita um formato de entrada (Clarion ou Windev) e um formato de saída desejado, convertendo de maneira automática. 3. Conversão de Data e Hora Clarion para Unix Timestamp - Para facilitar a interoperabilidade com sistemas que utilizam Unix timestamps. 4. Conversão de Data e Hora Windev para Unix Timestamp - Similar ao anterior, mas a partir de uma data e hora Windev.
Vou implementar essas funções adicionais para cobrir esses casos.
1. Função para Validar Data Clarion
Essa função verifica se uma data Clarion está em um intervalo válido (maior ou igual a 0).
PROCEDURE ValidateClarionDate(ClarionDate is int) : boolean // Verifica se uma data Clarion está dentro do intervalo válido
IF ClarionDate < 0 THEN Info("Data Clarion inválida. Deve ser maior ou igual a zero.") RESULT False ELSE RESULT True END
Uso:
IsValid = ValidateClarionDate(80375) Info("Data Clarion válida? " + IsValid)
2. Função de Conversão Geral (Conversão Bidirecional)
Esta função permite especificar o formato de entrada e o formato de saída (Clarion para Windev ou Windev para Clarion).
PROCEDURE ConvertDateTime(DateValue, TimeValue, TargetFormat is string) : array of int // Converte entre formatos de data e hora (Clarion para Windev ou Windev para Clarion)
ResultArray is array of int
SWITCH TargetFormat CASE "ClarionToWindev" ResultArray[1] = ClarionDateToWindevDate(DateValue) ResultArray[2] = ClarionTimeToWindevTime(TimeValue) CASE "WindevToClarion" ResultArray[1] = WindevDateToClarionDate(DateValue) ResultArray[2] = WindevTimeToClarionTime(TimeValue) OTHERWISE Info("Formato de conversão inválido. Use 'ClarionToWindev' ou 'WindevToClarion'.") END
RESULT ResultArray
Uso:
Result = ConvertDateTime(80375, 360000, "ClarionToWindev") Info("Data Windev: " + Result[1] + ", Hora Windev: " + Result[2])
3. Conversão de Data e Hora Clarion para Unix Timestamp
Esta função converte uma data e hora Clarion em Unix timestamp, útil para interoperabilidade com sistemas baseados em Unix.
PROCEDURE ClarionToUnixTimestamp(ClarionDate is int, ClarionTime is int) : int // Converte data e hora Clarion para Unix Timestamp
BaseUnixDate is DateTime = DateTimeBuild(1970, 1, 1, 0, 0, 0) WindevDateTime is DateTime = ClarionDateTimeToWindevDateTime(ClarionDate, ClarionTime) UnixTimestamp is int = DateDifference(WindevDateTime, BaseUnixDate, Second)
RESULT UnixTimestamp
Uso:
UnixTime = ClarionToUnixTimestamp(80375, 360000) Info("Unix Timestamp: " + UnixTime)
4. Conversão de Data e Hora Windev para Unix Timestamp
Esta função converte uma data e hora Windev em Unix timestamp.
PROCEDURE WindevToUnixTimestamp(WindevDateTime is DateTime) : int // Converte data e hora Windev para Unix Timestamp
BaseUnixDate is DateTime = DateTimeBuild(1970, 1, 1, 0, 0, 0) UnixTimestamp is int = DateDifference(WindevDateTime, BaseUnixDate, Second)
RESULT UnixTimestamp
Uso:
WindevDateTime = DateTimeBuild(2024, 11, 2, 1, 0, 1) UnixTime = WindevToUnixTimestamp(WindevDateTime) Info("Unix Timestamp: " + UnixTime)
Resumo das Funções Adicionais
As funções adicionais completam o sistema, incluindo:
1. Validação de Data Clarion (ValidateClarionDate) para garantir que a data Clarion está no intervalo adequado. 2. Conversão Geral (ConvertDateTime) para permitir uma conversão fácil entre Clarion e Windev. 3. Clarion para Unix Timestamp (ClarionToUnixTimestamp) para interoperabilidade com sistemas baseados em Unix. 4. Windev para Unix Timestamp (WindevToUnixTimestamp) para conversão direta de Windev para Unix timestamp.
Essas funções cobrem todos os casos mencionados, fornecendo um conjunto completo para conversão entre formatos de data e hora de Clarion, Windev e Unix, além de validação e comparação de intervalos.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | | | |
| | |
|