2014-03-13 5 views
3

현재 Coda의 DateTime 클래스의 시간대를 다루는 좌절감을 기반으로 NodaTime을 사용하고 있습니다. 지금까지, 나는 정말로 기쁩니다.NodaTime을 Unix 타임 스탬프로 변환하고 LocalDateTime의 중요성을

public static string nodaTimeTest(string input) 
{ 
    var defaultValue = new OffsetDateTime(new LocalDateTime(2000, 1, 1, 0, 0), Offset.Zero); 
    var pattern = OffsetDateTimePattern.Create("yyyy-MM-dd'T'HH:mm:sso<m>", CultureInfo.InvariantCulture, defaultValue); 
    var result = pattern.Parse(input).Value; 

    return result.ToString(); 
} 

세 가지 질문이 있습니다. 위에서 dateTime 문자열을 구문 분석 할 때 사용하는 메서드입니다. 내가 입력을 구문 분석하는 방법을 허용 format 문자열이 있습니다. 내 질문은 다음과 같습니다.


LocalDateTime(..)은 무엇입니까? 내가 사용한 방법은 매트 존슨의 스택 example이며, 날짜는 2000, 1, 1, 0, 0입니다. 나는 그 대부분의 최신 클래스 이후는 신기원 시간 1970, 1, 1, 0 ,0를 사용 알고, 이상한 줄 알았는데, 그래서 나는 신기원 날짜를 포함하는 나의 방법을 변경하지만 출력은 동일 :

enter image description here


은 어떻게 시간을 유닉스 타임 스탬프로 변환합니까? 그렇게하는 내장 된 방법이없는 것 같습니다.


이 방법을 사용 :

public static string nodaTimeTest6(string input, int timeZone) 
    { 
     // var defaultValue = new OffsetDateTime(new LocalDateTime(2000, 1, 1, 0, 0), Offset.Zero); 
     var defaultValue = new OffsetDateTime(new LocalDateTime(2000, 1, 1, 0, 0), Offset.FromHours(timeZone)); 
     var pattern = OffsetDateTimePattern.Create("yyyy-MM-dd'T'HH:mm:sso<m>", CultureInfo.InvariantCulture, defaultValue); 
     var result = pattern.Parse(input); 

     return result.Value.ToString(); 
    } 

을 나는이 방법으로 NodaTime의 능력을 테스트하고 있습니다 - 특히, 나는 정의 오프셋이있는 날짜/시간 구문 분석 할 수 있는지 궁금 해서요 내부, 그리고 동시에, 내 timeZone 입력 또한 시간대/오프셋의 입력을 허용합니다. 흥미롭게도, 내 입력 timeZone는 무시됩니다, 그래서 nodaTimeTest6 내 출력이 입력 날짜 문자열의 오프셋 :

enter image description here

이 원하는 동작인가가?

+1

Jon Skeet incoming ... – Kittoes0124

+0

NodaTime 태그는 StackOverflow의 Jon-Signal입니다. 방법 존에 의해 위대한 도구 .. 내가 코드를 사용하여 수동으로 어떤 과부하/방법/클래스를 사용하여 알아낼 필요없이 실행있어. 나는 특히 시간과 날짜 속성이 표현되는 방식을 좋아한다. 예를 들어, 나는 무언가를 잡아서 오프셋으로 표시 할 수 있습니다. 그것을 사랑해 .. – theGreenCabbage

답변

7

내 LocalDateTime (..)이 중요합니까?

  • OffsetDateTimePattern.Create 방법은 기본 값이 필요합니다. 구문 분석이 실패하고 result.Value을 사용하기 전에 result.Success을 확인하지 않은 경우에만 사용됩니다.

  • 다른 패턴에는 과부하가 있으며 기본값은 필요하지 않습니다 (issue #267 참조). 특정 기본값 인 2000-01-01T00:00:00.0000000+00:00을 선택 했으므로 기본값을 명시 적으로 지정하지 않은 경우 the other patterns use과 비슷합니다.

  • 실제로 아무런 의미가 없습니다. 원하는 기본값을 사용할 수 있습니다.

어떻게 유닉스 타임 스탬프로 시간을 변환합니까? 그렇게하는 내장 된 방법이없는 것 같습니다.

  • result.ValueOffsetDateTime이다.유닉스 타임 스탬프는 가장 가까운 초에 정확한 것을

    int unixTime = result.Value.ToInstant().Ticks/NodaConstants.TicksPerSecond; 
    
  • 참고 :이 작업을 수행 할 수 있도록 Instant 유형은 유닉스 시대를 사용합니다. JavaScript로 전달하는 경우 TicksPerMillisecond을 사용하고 long으로 돌려 보내야합니다. 나는 내부에 정의 된 오프셋이있는 날짜/시간 구문 분석 할 수있는 경우

은 ... 궁금하고, 동시에 내 timeZone 입력 또한 시간대/오프셋의 입력을 할 수 있습니다.

  • 미안하지만, 나는 완전히 당신이 요구하는지 이해가 안 돼요. 좀 더 명확히 해 주시겠습니까?

  • 제공 한 코드에서 기본 값의 오프셋과 입력 문자열의 오프셋을 혼동하는 것처럼 보입니다. 디폴트 값은 구문 분석이에 실패 할 경우에만 사용됩니다.

  • 입력에 오프셋을 포함하는 대신 오프셋을 제어하려면 OffsetDateTimePattern 대신 LocalDateTimePattern을 사용하여 구문 분석을 수행하십시오. 구문 분석이 끝나면 특정 영역과 연결할 수 있습니다.

  • 또한 명명 규칙을 지켜보십시오. int timeZone은 의미가 없습니다 (오프셋, 시간대가 아님). 아마 int offsetHours, 또는 더 나은 아직 Offset timeZoneOffset.

+0

1. 흠, 상관 없다면, 그때 나는 어떤 작품이든 사용할 것입니다! 2. 감사합니다! 이것을 시도 할 것이다. 3. 솔직히 오프셋/시간대의 차이를 모르거나 이해하지 못합니다. 항상 그들이 같은 것을 의미한다고 생각했습니다. – theGreenCabbage

+1

[timezone tag wiki] (http://stackoverflow.com/tags/timezone/info)를보십시오. 특히 "시간대! = 오프셋"섹션. 또한 관련된 [DST tag wiki] (http://stackoverflow.com/tags/dst/info)를 읽어 볼 수도 있습니다. –

+0

대단히 감사합니다. Matt. Unix 시간 변환기가 완벽하게 작동했습니다. 유닉스 시간과 정확히 반대되는 방법이 있습니까? 입력은 유닉스 시간이며 날짜 시간으로 나온다. – theGreenCabbage

관련 문제