2013-03-14 63 views
0

好的人,我在這裏與我假設是一個簡單的邏輯問題。基於郵政編碼的時區(非州)

我會先告訴你我的代碼(至少我認爲你需要)然後解釋問題。

Function GetTimeZone(ByVal state As String) As Integer 

    Dim TaxConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ConfigurationManager.AppSettings("Database") 
    Dim dbConnection As OleDbConnection = New OleDbConnection(TaxConnStr) 
    Try 



     Dim queryString As String 
     queryString = "SELECT Top 1 Zips.State, Zips.TimeZone " 
     queryString += "FROM Zips " 
     queryString += "WHERE (((Zips.State)='" & state & "'));" 

     Dim dbCommand As OleDbCommand = New OleDbCommand 
     dbCommand.CommandText = queryString 
     dbCommand.Connection = dbConnection 

     Dim dataAdapter As OleDbDataAdapter = New OleDbDataAdapter 
     dataAdapter.SelectCommand = dbCommand 
     Dim dataSet As DataSet = New DataSet 
     dataAdapter.Fill(dataSet) 
     If dataSet.Tables(0).Rows.Count >= 1 Then 
      Return dataSet.Tables(0).Rows(0).Item("TimeZone") 
     Else 
      Return 0 
     End If 

    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
     myLogger.Log(ex.Message) 
    Finally 
     dbConnection.Close() 
    End Try 
end Function 

好吧,我所要做的是找出基於不是國家(此代碼是如何得到它),但是郵政編碼的時區。這顯然是一些州(KY,TN,OK等)的B/C除以他們的時區。

所以我最終會喜歡這個功能來查看郵政編碼...找出郵政編碼是在哪個時區...然後返回時區。

如果不明顯。該信息正從中拉出的表名爲「Zips」。它由郵編,城市,州,縣,區號和時區等幾列組成。表中的時區是列只有與「5,6,7,8等」相對應的值。 5 =東部,6 =中央,等等。

感謝您的任何指導。

+0

維護你自己的時區數據庫從來不是一個好主意......但是如果你這樣做 - 確保你不只有5,6,7,8 - 這只是一個標準的偏移量。您還需要知道夏令時是否適用。我認爲這是一個僅限美國的數據庫?如果沒有,你還有更多的方法來處理。 – 2013-03-16 16:24:01

+0

要做的更好的事情是獲取郵政編碼質心的緯度/經度位置,並使用該位置獲取適用的時區。有大量的在線服務和數據庫可以兼得。 – 2013-03-16 16:25:01

回答

1

看起來很直截了當,除非我不理解某些東西。你首先需要改變你的方法簽名採取郵政編碼:

Function GetTimeZone(ByVal zipcode As Integer) As Integer 

然後,你必須改變你的查詢通過郵政編碼搜索:

queryString = "SELECT Top 1 Zips.TimeZone " 
queryString += "FROM Zips " 
queryString += "WHERE (((Zips.Zip)=" & zipcode & "));" 

一切應按原樣工作。