2012-09-11 3 views
2

안드로이드 클라이언트, 파이썬 서버 및 mysql 서버간에 datetimes를 전달해야합니다.Android Python MySQL 날짜/시간 구문 분석

그것은 작동합니다 다음

  • 안드로이드 클라이언트는 cherrypy 파이썬 서버 (? 나는 날짜 객체가 문자열로 전송해야 추측)
  • 클라이언트에서 서버로 정확한 시간을 보낸다

      : 날짜 시간 객체로와

이제이 두 사례를 작동 유용한 무언가로이 문자열을 구문 분석 할 수있다 5,

  • 날짜 시간 객체 MySQL 데이터베이스에 기록해야 서버 MySQL 데이터베이스로부터 날짜를 검색 및 파싱 DateTime 개체와 비교한다
  • (관련 데이터베이스 테이블 형 DATETIME의 속성이있다)
  • 일부 백그라운드 프로세스 후

    는 입력 매개 변수로 파이썬 날짜 객체와의 작업을 완료, 새로운 날짜 객체

    사람이 이러한 문제를 해결하기위한 좋은 해결책을 알고 있나요

    안드로이드 클라이언트에 다시 전달해야 하는가?

    +0

    시간대가 관련됩니까? –

    +0

    예. 이 응용 프로그램은 여러 언어를 지원하도록 설계되었으므로 다른 시간대를 지원합니다. – eff8691

    답변

    1

    datetime 값을 전송하는 데 가장 적합한 형식은 ISO 8601 standard입니다. 형식은 YYYY-mm-ddTHH:MM:SS+tz:tz이며, T은 선택 사항입니다.

    파이썬의 datetime.datetime 클래스는 이들을 간단한 추가 모듈로 구문 분석 할 수 있습니다 (How to parse an ISO 8601-formatted date? 참조). 출력은 .isoformat() method으로 쉽게 할 수 있습니다.

    MySQL의 DATETIME 열 유형은 UTC 값만 처리하지만 기본적으로 ISO 8601 datetime 문자열 (T 대신 공백이 있음)을 허용하므로 datetime 객체를 UTC로 캐스팅해야합니다 (언급 된 iso8601 모듈의 예 위) :

    import iso8601 
    utciso8601 = dt.astimezone(iso8601.iso8601.UTC).isoformat(' ')[:19] 
    

    데이터베이스에 시간대 오프셋도 삽입합니다. 단순히 tzname() method을 사용하여 datetime 개체에서 검색 한 다음 iso8601.iso8601.parse_timezone() 기능을 사용하여 MySQL에서로드 할 때 다시 구문 분석하십시오.

    # insertion: 
    cursor.execute('INSERT INTO dates VALUES(?, ?)', utciso8601, dt.tzname()) 
    
    # querying 
    for row in query: 
        timezone = iso8601.iso8601.parse_timezone(row[1]) 
        utcdt = iso8601.parse_date(row[0]) 
        dt = utcdt.astimezone(timezone) 
    

    안드로이드가 날짜와 시간을 얼마나 잘 처리하는지는 잘 모르겠지만 확실히 ISO 8601 형식을 잘 처리 할 수 ​​있습니다.

    +0

    답변 해 주셔서 감사합니다. 안드로이드 애플리케이션의 datetime 객체 측면에서 객체를 사용하려면 java.util 패키지의 클래스를 사용해야한다. 즉, 안드로이드 애플 리케이션을위한 Java SDK의 모든 것을 사용할 수있다. 지금은 GregorianCalendar 객체의 도움으로 실제 datetime을 얻습니다. – eff8691