문제

국제 날짜와 호환되는 날짜 상수를 선언하는 방법을 아는 사람이 있습니까?

난 노력 했어:

' not international compatible
public const ADate as Date = #12/31/04#

' breaking change if you have an optional parameter that defaults to this value
' because it isnt constant.
public shared readonly ADate As New Date(12, 31, 04)
도움이 되었습니까?

해결책

명령문에 의해 생성된 IL을 보면

public const ADate as Date = #12/31/04#

다음이 표시됩니다.

.field public static initonly valuetype [mscorlib]System.DateTime ADate
.custom instance void [mscorlib]System.Runtime.CompilerServices.DateTimeConstantAttribute::.ctor(int64) = ( 01 00 00 C0 2F CE E2 BC C6 08 00 00 )

주의할 점은 날짜시간상수속성 int64 틱 수를 사용하는 생성자로 초기화되고 있습니다.이 틱 수는 컴파일 타임에 결정되므로 이 값이 런타임에 초기화될 때 현지화가 작동할 가능성은 거의 없습니다.내 생각 엔 오류는 const 초기화가 아닌 코드의 다른 날짜 처리와 관련된 것입니다.

다른 팁

마이크로소프트 문서에 따르면,

"날짜 리터럴을 숫자 기호(# #)로 묶어야 합니다.M/d/yyyy 형식으로 날짜 값을 지정해야 합니다(예: #5/31/1993#).이 요구 사항은 로케일, 컴퓨터의 날짜 및 시간 형식 설정과 무관합니다."

이것이 올바르지 않고 구문 분석이 현재 로케일의 영향을 받는다는 말씀이신가요?

편집하다: 4자리 연도로 시도해 보셨나요?

VB에서 Date 객체에 데이터를 저장하면 무언가를 비교하거나 내보내기를 시도할 때까지 세계화에 대해 걱정할 필요가 없습니다.

이건 괜찮아:

Dim FirstDate as Date = Date.UtcNow() 'or this: = NewDate (2008,09,10)'
Dim SecondDate as Date

SecondDate = FirstDate.AddDays(1)

이는 세계화 규칙을 가져오고 현재 스레드의 문화 형식으로 인쇄합니다.

HeaderLabel.Text = SecondDate.ToString()

이것은 나쁘다:

Dim BadDate as Date = CDate("2/20/2000")

실제로 -- 이 경우 CDate가 올바른 문화권(InvariantCulture)을 사용하도록 강제하는 경우에도 괜찮습니다.

Dim OkButBadPracticeDate as Date = CDate("2/20/2000", CultureInfo.InvariantCulture)

모든 것을 특정 문화권으로 강제하려면 실행 스레드 문화권과 UI 문화권을 원하는 문화권(en-US, 고정 등)으로 설정해야 합니다.

날짜를 문자열로 사용하여 작업을 수행하고 있지 않은지 확인하세요. 실제 Date 객체인지 확인하세요!

알았어, 네가 어디에서 왔는지 더 잘 이해해..

어떻습니까:

  • 날짜 상수를 반환하는 정적 메서드를 만듭니다.이는 특정 DateTime 값으로 반환되므로 국제적인 문제를 극복합니다.
  • 이제 VB6 시절의 선택적 매개변수가 기억납니다. 하지만 메소드를 오버로드할 수는 없나요?날짜 없이 오버로드된 메서드를 사용하는 경우 정적에서 가져오면 됩니다.

편집하다: 무슨 말인지 잘 모르겠고 코드 샘플을 원하시면 이 게시물에 댓글을 달아주시면 제가 하나 알려드리겠습니다.

좋아, 여기서 무엇을 하려는지 잘 모르겠습니다.

  • 귀하가 게시하는 코드는 아니다 .NET을 포팅하려고 하시나요?
  • DateTime은 상수로 선언될 수 없습니다.
  • DateTime은 데이터 유형이므로 일단 초기화되면 초기화된 형식은 관련이 없습니다.
  • 상수 값이 필요한 경우 항상 동일한 DateTime을 반환하는 메서드를 만듭니다.

예를 들어:

public static DateTime SadDayForAll()
{
    return new DateTime(2001, 09, 11);
}

업데이트

도대체 그 모든 것을 어디서 구하는 겁니까?!

  • 거기 ~이다 C#과 VB.NET의 차이점 중 하나를 강조합니다.
  • 날짜 는 아니다 .NET 데이터 유형 - 날짜 시간 이다.
  • VB.NET에서 DateTime 상수를 생성할 수 있는 것처럼 보이지만 제한 사항이 있습니다.
  • 이 방법은 당신을 돕기 위해 존재했습니다. 왜냐하면 당신은 a에서 const를 생성할 수 없기 때문입니다. 변하기 쉬운 (즉.선택적 매개변수).그건 말도 안 돼요.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top