C#에서 연도를 4자리에서 2자리로 변환하고 다시 그 반대로 변환

StackOverflow https://stackoverflow.com/questions/115399

  •  02-07-2019
  •  | 
  •  

문제

내 신용카드 처리업체에서는 신용카드 만료일로부터 두 자리 연도를 보내도록 요구합니다.현재 처리 중인 방법은 다음과 같습니다.

  1. 나는 DropDownList 페이지에 있는 4자리 연도입니다.
  2. 나는 만료 날짜를 확인합니다 DateTime 필드를 사용하여 CC 프로세서에 전달되는 만료 날짜가 만료되지 않았는지 확인하세요.
  3. (필요에 따라) 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);

내장된 방식이 존재하더라도 현재보다 더 큰 것으로 검증되지 않으며 하위 문자열 호출과 거의 다르지 않습니다.나는 그것에 대해 걱정하지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top