C#에서 연도를 4자리에서 2자리로 변환하고 다시 그 반대로 변환
-
02-07-2019 - |
문제
내 신용카드 처리업체에서는 신용카드 만료일로부터 두 자리 연도를 보내도록 요구합니다.현재 처리 중인 방법은 다음과 같습니다.
- 나는
DropDownList
페이지에 있는 4자리 연도입니다. - 나는 만료 날짜를 확인합니다
DateTime
필드를 사용하여 CC 프로세서에 전달되는 만료 날짜가 만료되지 않았는지 확인하세요. - (필요에 따라) CC 프로세서에 두 자리 연도를 보냅니다.연도 DDL 값의 하위 문자열을 통해 이 작업을 수행합니다.
4자리 연도를 2자리 연도로 변환하는 방법이 있습니까?나는 에 아무것도 볼 수 없습니다 DateTime
물체.아니면 그냥 있는 그대로 계속 처리해야 할까요?
해결책
만료 날짜(월/년)를 사용하여 DateTime 개체를 만드는 경우 다음과 같이 DateTime 변수에 ToString()을 사용할 수 있습니다.
DateTime expirationDate = new DateTime(2008, 1, 31); // random date
string lastTwoDigitsOfYear = expirationDate.ToString("yy");
편집하다:유효성 검사 중에 DateTime 개체를 사용하는 경우 날짜에 주의하세요.카드 만료 날짜를 2008년 5월로 선택한 경우 카드는 5월 1일이 아닌 5월 말에 만료됩니다.
다른 팁
첫 번째 솔루션 (가장 빠름) :
yourDateTime.Year % 100
두 번째 솔루션 (내 의견으로는 더 우아함) :
yourDateTime.ToString("yy")
대답은 이미 주어졌습니다.하지만 여기에 뭔가를 추가하고 싶습니다.어떤 사람은 효과가 없다고 말했습니다.
당신이 사용하고있을 수도 있습니다
DateTime.Now.Year.ToString("yy");
그것이 작동하지 않는 이유입니다.나 또한 똑같은 실수를 저질렀다.
다음으로 변경하세요.
DateTime.Now.ToString("yy");
이것은 당신에게 도움이 될 것입니다:
public int Get4LetterYear(int twoLetterYear)
{
int firstTwoDigits =
Convert.ToInt32(DateTime.Now.Year.ToString().Substring(2, 2));
return Get4LetterYear(twoLetterYear, firstTwoDigits);
}
public int Get4LetterYear(int twoLetterYear, int firstTwoDigits)
{
return Convert.ToInt32(firstTwoDigits.ToString() + twoLetterYear.ToString());
}
public int Get2LetterYear(int fourLetterYear)
{
return Convert.ToInt32(fourLetterYear.ToString().Substring(2, 2));
}
.NET에는 특별한 내장 기능이 없다고 생각합니다.
업데이트:아마도 수행해야 할 일부 검증이 누락되었습니다.입력된 변수의 길이 등을 검증합니다.
이 시점에서 가장 간단한 방법은 연도의 마지막 두 자리를 자르는 것입니다.신용카드의 경우 과거 데이트는 불필요하므로 Y2K는 의미가 없습니다.코드가 90년 이상 동안 계속 실행되는 경우에도 마찬가지입니다.
더 나아가 드롭다운 목록을 사용하는 대신 사용자가 연도를 직접 입력하게 하라고 말하고 싶습니다.이는 일반적인 방법이며 대부분의 사용자가 처리할 수 있습니다.
예를 들어 myDate.ToString("MM/dd/yy")와 같은 사용자 정의 형식 문자열과 함께 DateTime 개체 ToString을 사용합니다.
일부 시스템에서는 컷오프가 75로 결정되는 경우가 있습니다.75세 이상은 19xx이고 그 이하는 20xx입니다.
//using java script
var curDate = new Date();
var curYear = curDate.getFullYear();
curYear = curYear.toString().slice(2);
document.write(curYear)
//using java script
//using sqlserver
select Right(Year(getDate()),2)
//using sql server
//Using c#.net
DateTime dt = DateTime.Now;
string curYear = dt.Year.ToString().Substring(2,2).ToString() ;
//using c#.net
DateTime.Now.Year - (DateTime.Now.Year / 100 * 100)
현재 연도에 작동합니다.변화 DateTime.Now.Year
1년 더 일하게 하려고요.
페이지의 원래 드롭다운을 2자리 값으로만 설정하면 안 되나요?특히 CC 공급업체가 이미 2자리 숫자만 입력하는 경우 연도를 볼 때 신용 카드는 작은 범위에만 적용됩니다.
다음은 사용자 지정 형식 문자열을 전달하여 ToString() 메서드를 사용하여 날짜 및 시간 형식을 지정하는 방법에 대한 4Guys 기사에 대한 링크입니다.
http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=181
만약에 문제가 사라질 경우를 대비해 여기에 예제 중 하나가 있습니다.
'Create a var. named rightNow and set it to the current date/time
Dim rightNow as DateTime = DateTime.Now
Dim s as String 'create a string
s = rightNow.ToString("MMM dd, yyyy")
그의 링크가 끊어졌으므로 여기에는 이러한 형식 지정 옵션을 가능하게 하는 DateTimeFormatInfo 클래스에 대한 링크가 있습니다.
http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx
부분 문자열을 사용하는 것보다 그런 작업을 수행하는 것이 좀 더 일관성이 있을 수 있지만 누가 알겠습니까?
이것은 오래된 게시물이지만 다음을 사용하여 예를 들어야겠다고 생각했습니다. ExtensionMethod
(C# 3.0부터) 이렇게 하면 구현이 숨겨지고 대신 프로젝트의 모든 곳에서 사용할 수 있게 되거나 코드를 계속해서 다시 만들거나 일부 유틸리티 클래스를 인식해야 하기 때문입니다.
확장 메소드를 사용하면 새로운 파생 유형을 만들거나, 재 컴파일하거나, 원래 유형을 수정하지 않고 기존 유형에 "추가"메소드를 "추가 할 수 있습니다.확장 방법은 특수한 종류의 정적 방법이지만 확장 유형의 인스턴스 방법 인 것처럼 호출됩니다.C# 및 Visual Basic로 작성된 클라이언트 코드의 경우 확장 방법을 호출하는 방법과 실제로 유형에 정의 된 메소드 사이에는 명백한 차이가 없습니다.
public static class DateTimeExtensions
{
public static int ToYearLastTwoDigit(this DateTime date)
{
var temp = date.ToString("yy");
return int.Parse(temp);
}
}
그런 다음 DateTime
예를 들어 객체...
var dateTime = new DateTime(2015, 06, 19);
var year = cob.ToYearLastTwoDigit();
대답은 매우 간단합니다.
날짜시간 오늘 = 날짜시간.오늘;string zeroBased = Today.ToString("yy-MM-dd");
이것은 나에게 괜찮은 것 같습니다.yourDateTime.ToString().Substring(2);
내장된 방식이 존재하더라도 현재보다 더 큰 것으로 검증되지 않으며 하위 문자열 호출과 거의 다르지 않습니다.나는 그것에 대해 걱정하지 않을 것입니다.