본문 바로가기
C#

[C#][Unity]인터넷에서 시간 가져오기!

by teamnova 2021. 9. 3.

안녕하세요!!!!

오늘은 인터넷에서 시간을 가져오는 예제를 해보도록하겠습니다~

프로그램에 시간을 표시하는 방법은 여러가지가 있는데요 서버에 시간을 맞춰놓고 서버시간을 가져오는 방법이나. 클라이언트PC의 시간을 가져와서 표시해주는 방법등 여러가지 방법이 있습니다. 

하지만 오늘은 인터넷을 통해 시간을 가져와 보겠습니다! 

 

우선 코드부터 살펴보도록 하겠습니다!

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using UnityEngine.Networking;

public class TimerManager : MonoBehaviour
{
    public string url = "";

    void Start()
    {
        StartCoroutine(WebChk());
    }
    IEnumerator WebChk() {
        UnityWebRequest request = new UnityWebRequest();
        using (request = UnityWebRequest.Get(url))
        {
            yield return request.SendWebRequest();

            if (request.isNetworkError)
            {
                Debug.Log(request.error);
            }
            else {
                string date = request.GetResponseHeader("date"); //이곳에서 반송된 데이터에 시간 데이터가 존재
                Debug.Log("받아온 시간"+date); // GMT로 받아온다.
                DateTime dateTime = DateTime.Parse(date).ToLocalTime(); // ToLocalTime() 메소드로 한국시간으로 변환시켜 준다.
                Debug.Log("한국시간으로변환"+dateTime);
            }
        }
    }
}

위에서 부터 코드를 살펴보겠습니다!

 

public class TimerManager : MonoBehaviour
{
    public string url = "";
}

 

string 변수를 public 으로 설정해서 유니티 에디터상에서 쉽게 url을 변경 할 수 있게 변수를 선언 해 주었습니다.

 

    void Start()
    {
        StartCoroutine(WebChk());
    }

Strart 생명주기에 코루틴으로 함수를 만들어 에디터 시작과 동시에 시간을 받아올 수 있게 하였습니다.

 

    IEnumerator WebChk() {
        UnityWebRequest request = new UnityWebRequest();
        using (request = UnityWebRequest.Get(url))
        {
            yield return request.SendWebRequest();

            if (request.isNetworkError)
            {
                Debug.Log(request.error);
            }
            else {
                string date = request.GetResponseHeader("date"); //이곳에서 반송된 데이터에 시간 데이터가 존재
                Debug.Log("받아온 시간"+date); // GMT로 받아온다.
                DateTime dateTime = DateTime.Parse(date).ToLocalTime(); // ToLocalTime() 메소드로 한국시간으로 변환시켜 준다.
                Debug.Log("한국시간으로변환"+dateTime);
            }
        }
    }

오늘 예제의 핵심 of 핵심입니다.

UnityRequest를 통해 데이터를 받아옵니다. 받아온 데이터를

                string date = request.GetResponseHeader("date"); //이곳에서 반송된 데이터에 시간 데이터가 존재
                Debug.Log("받아온 시간"+date); // GMT로 받아온다.

naver에서 시간을 받아 오게된다면 시간은 GMT 시간으로 되어있을 것입니다.

GMT(투타임존)는 Greenwich Mean Time의 약자로 그리니치 평균시, 즉, 세계 표준 시간을 뜻합니다.

내가 보고 싶은 시간은 한국 시간이니 받아온 값을 한국 시간으로 바꿔줘야겟죠?

 

DateTime dateTime = DateTime.Parse(date).ToLocalTime(); // ToLocalTime() 메소드로 한국시간으로 변환시켜 준다.
Debug.Log("한국시간으로변환"+dateTime);

ToLocalTime() 메소드를 사용하여 GMT 시간을 한국 시간으로 바꿔 주도록 하겠습니다!

ToLocalTime() 은 GMT 시간에 UTC 오프셋을 더한 것과 같습니다.

여기까지 스크립트는 완성 되었습니다!!

 

 

유니티에 미리 스크립트를 만들어 놨으니 빈 오브젝트를 만들어서 스크립트를 실행 할 수있게 만들어 주겠습니다!

 

빈 오브젝트를 만들어서 TimeManager고 이름을 바꿔주고 오브젝트에 미리 만들어놨던 스크립트를 드레그 해서 넣어 줍니다! 그리고 url 변수에 한국에서 가장 자주 사용되는 Naver의 주소를 넣어줬습니다!

 

그리고 실행을 해보면~

 

 

짜장~ 시간이 잘 받아와 진것을 볼 수 있습니다! 인터넷에서 받아온 시간이라 그런지 평소에 제가 차고다니는 시계보다도 시간이 정확하네요..(눈물)

 

오늘은 여기까지 하겠습니다 그럼 모두 즐코 하세요!!!