簡體   English   中英

如何將BigQuery時間戳轉換為DateTime?

[英]How to convert BigQuery Timestamp to DateTime?

我正在使用Google.Cloud.BigQuery.V2訪問大查詢。 在我的表中,我在Timestamp中有一個字段created_at(例如:UTC 2019-08-11 11:22:22.123)。 當我嘗試將此字段轉換為C#datetime時,它提供以下輸出:

8/11/2019 11:22:22 PM

當我嘗試將其轉換為日期時間(格式:yyyy-MM-dd HH:mm:ss.fffffff)時,它為我提供了以下值

2019-08-11 22:22:22.0000000

但我希望我的輸出看起來像這樣2019-08-11 11:22:22.1230000

這是我的代碼

string created_at = $"{row["created_at"]}".ToString() == null ? "" : $"{row["created_at"]}".ToString();

DateTime date = DateTime.ParseExact(created_at, "M/d/yyyy H:mm:ss tt", CultureInfo.InvariantCulture);

string newDate = date.ToString("yyyy-MM-dd HH:mm:ss.fffffff");

Console.WriteLine (newDate);

我在這里做錯了什么? 如何獲得毫秒?

你應該用這個

string newDate = date.ToString("yyyy-MM-dd hh:mm:ss.fffffff");

更多關於格式說明符這里

采用

var date=(DateTime?)row["created_at"];
var text=string.Format("{0:yyyy-MM-dd hh:mm:ss.fffffff tt}", date, 
                       CultureInfo.InvariantCulture);

要么

var date=(DateTime?)row["created_at"];
var text=FormattableString.Invariant($"{date:yyyy-MM-dd hh:mm:ss.fffffff tt}");

要讀取BigQueryDbType.Timestamp值並將其格式化為字符串,使用12小時表示法和AM / PM英文指示符。

說明

源代碼本身顯示,調用row["created_at"]將轉換BigQueryDbType.Timestamp類型將轉換為UTC DateTime 這意味着此代碼將起作用:

var date=(DateTime?)row["created_at"];

返回的日期包含那里的所有信息。 如果該值包含毫秒,則date也將包含毫秒。 源代碼顯示該值的精度為10微秒。

DateTime是一個二進制值,沒有格式。 僅當需要將字符串解析為DateTime值或使用ToString()String.Format()或字符串插值將日期時間值格式化為字符串以顯示或保存到文本文件時,格式才適用。

例如, o 標准格式說明符創建ISO8601格式的字符串:

var date=DateTime.UtcNow.ToString("o")
//2019-09-18T14:02:22.2048166Z

HH是兩位數的說明符,它返回24小時值(0-23),而hh返回0到12之間的小時。當使用hh還應該使用t (AM / PM指示符),否則無法說出時間是上午10點還是下午10點。

這返回14:00等:

DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fffffff")
//2019-09-18 14:07:48.2517651

雖然這回來了

DateTime.UtcNow.ToString("yyyy-MM-dd hh:mm:ss.fffffff")
//2019-09-18 02:08:45.1001800

哪個問題-這是上午還是下午? 最后添加tt可以解決此問題,但是返回的指示符將被本地化。 為了確保使用特定的指示符,我們需要傳遞一個CultureInfo參數:

DateTime.UtcNow.ToString("yyyy-MM-dd hh:mm:ss.fffffff tt",CultureInfo.InvariantCulture)
//2019-09-18 02:10:39.9194735 PM

將所有內容放在一起,以從BigQuery獲取日期,然后使用AM / PM將其格式化為字符串:

var date=(DateTime?)row["created_at"];
var text=string.Format("{0:yyyy-MM-dd hh:mm:ss.fffffff tt}",date,CultureInfo.InvariantCulture);

使用字符串插值的等效項是:

var text=FormattableString.Invariant($"{date:yyyy-MM-dd hh:mm:ss.fffffff tt}");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM