매크로 프로그램 다운로드
https://autopeak.co.kr
AutoPeak RPA Macro
오토픽 매크로는 복잡한 반복 작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.
autopeak.co.kr
#매크로 #메크로 #매크로프로그램 #엔지엠소프트웨어 #지존오토 #엔지엠에디터 #엔지엠플레이어 #오토핫키 #비활성매크로 #하드웨어매크로 #기계식매크로 #마우스광클릭 #키보드매크로 #이미지서치 #이미지매치 #이미지맥스 #블로그 #카페 #인스타그램 #유튜브 #소셜네트워크 #카카오톡 #텔레그램 #자동화
안녕하세요. 업무 자동화 RPA 매크로 오토픽입니다.
오늘은 매크로 프로그램에서 시간을 계산하는 다양한 방법을 알아보도록 하겠습니다.
시간은 계산 방법이 생각보다 복하세요. 업무 자동화 RPA 매크로 오토픽입니다.
오늘은 매크로 프로그램에서 시간을 계산하는 다양한 방법을 알아보도록 하겠습니다.
시간은 계산 방법이 생각보다 복잡합니다.
시간은 년 월 일 시 분 초 밀리초까지 구분되어 있고, 또 어떤 경우에는 날짜가 무슨 요일인지도 알아야 합니다.
그리고, 10진법에 익숙한 숫자 체계에서 60진법을 사용하는 시간을 일반적인 방식으로 처리하기는 쉽지 않습니다.
예외적으로 윤일과 윤달 그리고 윤년도 있어서 복잡도가 더 올라가게 됩니다.
그래서, 날짜와 시간 계산을 시스템에서 처리하는건 생각보다 어렵습니다.
이 내용은 날짜와 시간을 비교하기에 앞서 2개의 날짜를 연산해서 나온 결과 값을 어떻게 처리하는지 알아보도록 하겠습니다.
오토픽 매크로 에디터를 실행하고 왼쪽 하단의 함수 상자에서 표현식 카테고리에 있는 날짜 연산을 스크립트에 추가하세요.
아시다시피 날짜 연산과 표현 방법은 상당히 까다롭습니다. 이는 오토픽 매크로뿐만 아니라 프로그래밍에서도 복잡하게 처리됩니다.
일부 프로그래밍 언어들은 날짜 처리가 복잡하고 어렵기도 해서 별도의 패키지나 라이브러리를 사용하기도 합니다.
이 상태로 매크로를 실행하고 결과를 확인 해보세요.
오늘 날짜 + 오늘 날짜의 결과가 만들어집니다.
참고로, 날짜 값을 입력하지 않으면 기본적으로 오늘 날짜로 설정됩니다.
작년 8월 10일로 날짜를 입력하고 실행하면 오늘 + 설정 값이 되어 결과는 4048-08-10 오전 10:45:41가 나옵니다.
오른쪽 값에 30을 입력하세요. 그리고, 날짜 연산 옵션을 Day로 변경하세요.
이렇게하면 오늘 날짜에 30일을 더한 결과가 만들어집니다.
연산자를 빼기로 바꾸고 작년 8월 10일로 설정한 후 실행 해보세요.
오늘 - 설정 값이 되어 0001-05-25 오전 10:48:56 결과가 만들어집니다.
날짜 차이만 알고 싶다면 날짜 결과 형식을 DayOfYear로 변경하세요.
매크로를 실행하고 결과를 확인 해보세요.
만약, 위의 연산된 날짜의 요일을 알고 싶다면 아래와 같이 설정하면 됩니다.
요일은 아래와 같이 표현할 수 있습니다.
- D: 요일을 숫자로 출력합니다. 요일은 일요일이 0이고, 토요일이 6입니다.
- E: 요일을 영어 전체 이름으로 표시합니다. (기본값)
- e: 요일을 영어 약자로 표시합니다.
- K: 요일을 한국어 전체 이름으로 표시합니다.
- k: 요일을 한국어 약자로 표시합니다.
날짜 연산 관련된 내용은 여기까지 알아보고 마치도록 하겠습니다.
날짜 비교와 날짜 연산에 대해 자세한 설명은 아래 유튜브 동영상을 참고 해주세요.
이번에는 좀 더 쉬운 방법으로 날짜와 시간을 계산 해보도록 하겠습니다.
사실 이게 더 쉬운건지는 모르겠지만, 몇가지만 외운다면 액션을 이용한 방법보다 빠르고 풍부한 표현이 가능해집니다.
에디터 왼쪽 하단의 함수 상자탭에서 C# 카테고리를 확장하세요.
그리고, C# 코딩과 C# 함수 액션을 각각 추가하세요.
C# 코딩 액션을 선택하고, 아래와 같이 코드를 작성해줍니다.
클래스 이름과 함수 이름(C#에서는 메소드라고 부름)을 각각 입력하고 매크로를 실행 해보세요.
결과값을 보면 현재 시간에서 1시간을 뺀 시간을 확인할 수 있습니다.
아래 코드는 C# 코드를 사용해서 날짜와 시간 그리고, 요일을 어떻게 처리하는지 설명하고 있습니다.
날짜와 시간을 다루는 것은 단순해 보이지만, 실제로는 여러 복잡한 문제를 내포하고 있습니다. 주요 어려운 점들은 다음과 같습니다.
1. 타임존(Timezone) 문제
- 세계에는 여러 개의 표준 시간이 존재하며, 국가별/지역별로 다르게 운영됩니다.
- 예를 들어, 한국(KST, UTC+9)과 미국(EST, UTC-5) 간의 시간 차이를 계산해야 할 경우 복잡해집니다.
- DateTime.Now를 사용할 경우 시스템의 로컬 시간을 반환하기 때문에, 글로벌 애플리케이션에서는 UTC 변환이 필요합니다.
2. 서머타임(Daylight Saving Time, DST)
- 일부 국가에서는 여름과 겨울에 시간을 한 시간씩 조정하는 서머타임을 운영합니다.
- 예를 들어, 미국의 뉴욕에서는 3월 둘째 주 일요일에 한 시간을 추가하고, 11월 첫째 주 일요일에 한 시간을 감소합니다.
- 이로 인해 특정 날짜의 시간을 계산할 때 예상치 못한 결과가 나올 수 있습니다.
3. 윤년(Leap Year) 문제
- 윤년은 4년마다 한 번씩 2월이 29일까지 존재하는 해를 의미합니다.
- 하지만 윤년 규칙은 단순하지 않으며, 다음과 같은 조건을 따릅니다.
- 4로 나누어떨어지는 해는 윤년이다.
- 단, 100으로 나누어떨어지는 해는 윤년이 아니다.
- 단, 400으로 나누어떨어지는 해는 윤년이다.
- 예를 들어, 2000년은 윤년이지만, 1900년은 윤년이 아닙니다.
4. 달력 시스템(Calendar System) 문제
- 대부분의 프로그램은 그레고리력(Gregorian Calendar, 현재 국제 표준)을 사용하지만, 다른 달력도 존재합니다.
- 불교력(Buddhist Calendar): 태국, 미얀마 등에서 사용 (서기보다 543년 빠름)
- 히브리력(Hebrew Calendar): 유대교에서 사용
- 이슬람력(Islamic Calendar): 이슬람권에서 사용 (태양력이 아닌 음력 기반)
- 다른 문화권의 날짜를 변환해야 하는 경우 복잡한 연산이 필요합니다.
5. 형식(format) 문제
- 날짜 및 시간의 형식은 국가 및 시스템에 따라 다르게 표현됩니다.
- 미국: MM/dd/yyyy (예: 03/30/2025)
- 유럽: dd/MM/yyyy (예: 30/03/2025)
- ISO 8601: yyyy-MM-dd (예: 2025-03-30, 국제 표준)
- 이로 인해 날짜를 문자열로 변환하거나, 문자열을 날짜로 변환할 때 오류가 발생할 수 있습니다.
6. 시간 비교 및 연산 문제
- 시간 연산 시 '날짜만 비교할 것인가' 또는 '시간까지 비교할 것인가'에 따라 결과가 다르게 나옵니다.
- DateTime 객체를 단순 비교할 경우, 미세한 시간 차이(밀리초, 초 등)까지 포함되어 예상과 다른 결과가 나올 수 있습니다.
- TimeSpan을 이용하여 두 날짜의 차이를 계산할 때, 날짜만 비교하려면 Date 부분만 사용해야 합니다.
7. 윤초(Leap Second) 문제
- 국제 표준시(UTC)는 지구 자전 속도의 변화로 인해 가끔 1초를 추가하거나 제거하는 윤초를 적용합니다.
- 대부분의 프로그램은 윤초를 고려하지 않기 때문에, 정밀한 시간 계산이 필요한 경우 문제가 발생할 수 있습니다.
8. 데이터베이스와의 호환성 문제
- DateTime 값을 저장할 때, 데이터베이스가 지원하는 형식과 차이가 날 수 있습니다.
- SQL Server: DATETIME, DATETIME2
- MySQL: DATETIME, TIMESTAMP
- PostgreSQL: TIMESTAMP WITH TIME ZONE
- 어떤 데이터베이스는 타임존을 저장하지 않고, 어떤 데이터베이스는 UTC 변환을 자동으로 수행하기도 합니다.
해결 방법 (Best Practices)
- 타임존을 고려하여 날짜/시간을 저장할 것
- 대부분의 글로벌 애플리케이션은 UTC 기반으로 시간을 저장하고, 필요할 때 로컬 시간으로 변환합니다.
- C#에서 DateTime.UtcNow를 사용하는 것이 좋습니다.
- 날짜 포맷을 명확하게 지정할 것
- 표준 포맷인 ISO 8601 (yyyy-MM-ddTHH:mm:ssZ)을 사용하면 국가별 차이를 줄일 수 있습니다.
- 날짜 비교 시 시간을 고려할 것
- 날짜만 비교할 경우 .Date 속성을 사용하여 시간을 제거하고 비교하는 것이 안전합니다.
- 서머타임(DST) 적용 여부를 확인할 것
- TimeZoneInfo 클래스를 이용하면 서머타임을 자동으로 적용할 수 있습니다.
C#에서는 DateTime, DateTimeOffset, TimeSpan, TimeZoneInfo 등의 클래스를 활용하여 문제를 해결할 수 있습니다.
이외에도 루아와 오토핫키 언어도 제공하고 있는데요. 내용이 너무 길어지기 때문에 다음에 좀 더 자세하게 알아볼께요.
참고로, 데이타베이스를 가지고 있다면 쿼리를 이용해서 결과를 받아올수도 있습니다.
특수한 경우지만 데이타베이스의 서버 시간이 필요할 때 이 방법을 사용하기도 합니다.
[ 각종 자동화 매크로 및 RPA 프로그램 제작 해드립니다. ]
[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]
원본 글 보기
https://autopeak.co.kr/bbs/board.php?bo_table=product99
AutoPeak RPA Macro
오토픽 매크로는 복잡한 반복 작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.
autopeak.co.kr
댓글