0

GridView을 사용하여 DateTime 값을 표시하려고합니다. 지금까지 나는 사용하여 내가 원하는 형식 문자열을 사용하여 데이터를 표시 할 수 있었다 :날짜를 ASP로 표시 : GridView BoundField

<asp:GridView ID="myGrid" ... > 
    <Columns> 
     <asp:BoundField DataField="myField" DataFormatString={0:MM/dd/yyyy hhmmss} ... /> 
     ... 
    </Columns> 
    ... 
</asp:GridView> 

지금 데 문제는이 항상 현지 시간으로 표시되고 있다는 점이다. 내 사용자는 어디에 있든 관계없이 항상 UTC로 표시 될 것으로 예상됩니다. GridView에는 현지 시간 대신 UTC 시간을 표시 할 수있는 방법이 있습니까?

Dim myDateAsString as String = "03/31/2014 19:00" 
Dim myDate as DateTime = DateTime.ParseExact(myDateAsString, "MM/dd/yyyy HH:mm", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.AssumeUniversal) 

을 나는 비슷한 찾고 있어요 :

예를 들어, 내가 vb.net에서, 내가 함께 표준시를 사용하도록 말할 수있는 문자열을 날짜로 변환하는 것을 발견했다 내가 GridView을 ASP에 설치할 때 사용할 수있는 부분은 .AssumeUniversal입니다.

나는 분명히 묻고있는 것이 희망이다. 그렇지 않으면 누군가가 나에게 명확하지 않은 것을 알리면 더 자세히 설명하려고 할 수 있습니다.


UPDATE : 내 GridView에 대한

DataSource

그냥 내 데이터베이스에서 데이터를 끌어 SELECT 쿼리에 의해 채워지는 DataSet이다. 여기에 관심이있는 분야는 내 데이터베이스에 DateTime 필드이며, 으로 할당되면 여전히 DateTime 일 것으로 가정하고 있습니다. 그 맞습니까? mySQLObject.sel_from_table(vars)은 상술 한 바와 같이 DataSet를 반환합니다 경우 그것은 GridView 충전에 관련된 코드 만 같은 날에 보이는

myGrid.DatqaSource = mySQLObject.sel_from_table(vars) 
myGrid.DataBind() 

입니다. 지금까지의 답변을 통해 데이터를 GridView으로 보내기 전에 데이터를 UTC로 변경해야한다고 제안했습니다. 어떻게해야합니까? 어떻게하면 쿼리에서 변경해야합니까? 또는 으로 지정하기 전에 DataSet에?

답변

1

그리드보기는 단지 디스플레이 메커니즘 일뿐입니다. 지정한 형식으로 전달 된 값이 표시됩니다. 값 자체 (Utc 날짜)를 변경하려는 경우 다음 두 가지 옵션이 있습니다.

  1. 템플릿 항목 Utc 날짜를 계산하기위한 평가 옵션을 호출 할 수있는 항목입니다.
  2. 그리드 뷰가 바인딩 할 수 있도록 myField 서버 측의 값을 변경하십시오. 예 : 귀하의 SQL 쿼리 결과.

어느 쪽이든 서버 쪽 코드는 날짜를 UTC (ToUniversalTime() 또는 DateTime.UtcNow 등)로 변환하고 표시하기 위해 전송해야합니다.

여기 TemplateField 사용 방법이 나와 있습니다.당신의 ASPX 뒤에 코드에서

<asp:TemplateField HeaderText="My Fields"> 
    <ItemTemplate> 
     <asp:Label runat="server" text='<%# GetUtcFormattedDate((DateTime)Eval("myField")) %>' /> 
    </ItemTemplate> 
</asp:TemplateField> 

에서

, 당신은 당신은 데이터베이스에서 데이터를 가져 오는 당신의 쿼리에서 UTC 시간을 변환 할 수있는 정적 메서드를

public static string GetUtcFormattedDate(DateTime date) 
{ 
return date.ToUniversalTime().ToString(YOUR_DATE_FORMAT_STRING); 
} 
+0

흠. 내'DataSource'가'SELECT' 쿼리의 결과 일 경우,'GridView'에 도달하기 전에 어떻게 변환합니까? OP에 대한 업데이트를 참조하십시오. – GeneralMike

+0

감사! 저는 실제로 VB를 사용하기 때문에 조금은 가지고 놀았지만'Eval' 아이디어가있는'TemplateField'는 훌륭하게 작동했습니다. – GeneralMike

+1

기쁜. 앞으로 cb에서 VB를 원하면 온라인 변환 사이트가 있습니다. C# 붙여 넣기, VB 가져 오기. –

0

을 가질 수 있습니다.

select 절에서 다음을 사용하십시오.

SELECT DATEADD (HH, 'Your UTC Offset', DateYouWantSelected) 
+1

일광 절약 시간제로 인해 UTC 오프셋이 일정하지 않을 수 있으므로이 방법을 사용하면 나에게 적합하지 않을 것으로 생각됩니다. – GeneralMike

+0

실행중인 응용 프로그램에서 UTC 오프셋을 전달할 수 있습니다. http://msdn.microsoft.com/en-us/library/system.timezone.getutcoffset.aspx – Bailcm

+0

제공된 링크에서 :'참고 : GetUtcOffset 메서드는 현지 표준 시간대에 대한 현재 일광 절약 시간 조정 규칙 만 인식합니다 . 결과적으로 최신 조정 규칙이 적용되는 기간 동안에 만 현지 시간의 UTC 오프셋을 정확하게 반환 할 수 있습니다. 시간이 이전 조정 규칙의 적용을받는 역사적인 날짜 및 시간 값이면 부정확 한 결과를 반환 할 수 있습니다.'DATEADD 만 사용하면 오프셋이 항상 같을 때만 작동합니다. 그건 나에게는 어울리지 않을 것이다. – GeneralMike