我覺得這應該很容易,但我很難弄清楚。我從 API 中獲取一個日期的整數。Json 提供了類似“20210307”的日期屬性。對我來說,將這個日期轉換為 yyyy/mm/dd 格式的最佳方法是什么,有沒有辦法也可以翻轉(也許是去年?)。我一直在嘗試在課堂上提出一種方法,但只是遇到了問題,這讓我覺得我完全不在了。謝謝!
List<CovidDataModel> coviddata;
string errorString;
protected override async Task OnInitializedAsync()
{
var request = new HttpRequestMessage(HttpMethod.Get, "https://api.covidtracking.com/v1/states/daily.json");
var client = _clientFactory.CreateClient();
HttpResponseMessage response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
coviddata = await response.Content.ReadFromJsonAsync<List<CovidDataModel>>();
errorString = null;
}
else
{
errorString = $"Could not load Covid Data: {response.ReasonPhrase}";
}
}
部分模型如下:
public class CovidDataModel
{
public int date { get; set; }
}
uj5u.com熱心網友回復:
您可以使用DateTime.ParseExact來決議自定義日期格式。只需根據您收到的 int 日期回應切換“yyyyMMdd”。
int date = 20210307;
var dateTime = DateTime.ParseExact(
date.ToString(),
"yyyyMMdd",
CultureInfo.InvariantCulture);
Console.WriteLine(dateTime);
輸出:
7/3/2021 12:00:00 AM
編輯:附加資訊
我相信您之所以說“它在顯示資料時有效”是因為有時請求會掛起。
- 更新您的請求方法,如下面的代碼所示。
- 在Class 中使用可空型別,
int因為某些值在 json 資料中回傳,當 .DateTimeCovidDataModelnulldeserializing
帶有一些額外改進的代碼:
@page "/"
@using System.Text.Json
@using System.Globalization
@using System.Text.Json.Serialization;
@inject IHttpClientFactory _clientFactory
<PageTitle>Index</PageTitle>
<h1>Covid Data</h1>
@if (coviddata is null)
{
<div class="d-flex justify-content-center mb-3">
<p>Loading covid data...</p>
</div>
<div class="d-flex justify-content-center">
<div class="spinner-border" role="status"></div>
</div>
}
else
{
<table class="table">
<thead>
<tr>
<th scope="col" width="50">#</th>
<th scope="col" width="100">Date</th>
<th scope="col" width="100">state</th>
<th scope="col" width="100">positive</th>
</tr>
</thead>
<tbody>
@foreach (var data in coviddata)
{
<tr>
<th scope="row">@(coviddata.IndexOf(data) 1)</th>
<td>@ConvertIntToDate(data.date.Value, "yyyyMMdd").ToString("dd/MM/yyyy")</td>
<td>@data.state</td>
<td>@data.positive</td>
</tr>
}
</tbody>
</table>
}
@code{
List<CovidDataModel> coviddata;
string errorString;
protected override void OnInitialized()
{
GetCovidData();
}
private async Task GetCovidData()
{
var options = new JsonSerializerOptions
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault
};
var client = _clientFactory.CreateClient();
using (var response = await client.GetAsync("https://api.covidtracking.com/v1/states/daily.json",
HttpCompletionOption.ResponseHeadersRead))
{
if (response.IsSuccessStatusCode)
coviddata = await response.Content.ReadFromJsonAsync<List<CovidDataModel>>(options);
else
errorString = $"Could not load Covid Data: {response.ReasonPhrase}";
}
StateHasChanged();
}
private DateTime ConvertIntToDate(int date, string format)
{
return DateTime.ParseExact(
date.ToString(),
format,
CultureInfo.InvariantCulture);
}
public class CovidDataModel
{
public int? date { get; set; }
public string state { get; set; }
public int? positive { get; set; }
public int? probableCases { get; set; }
public int? negative { get; set; }
public object pending { get; set; }
public string totalTestResultsSource { get; set; }
public int? totalTestResults { get; set; }
public int? hospitalizedCurrently { get; set; }
public int? hospitalizedCumulative { get; set; }
public int? inIcuCurrently { get; set; }
public int? inIcuCumulative { get; set; }
public object onVentilatorCurrently { get; set; }
public object onVentilatorCumulative { get; set; }
public int? recovered { get; set; }
public string lastUpdateEt { get; set; }
public DateTime? dateModified { get; set; }
public string checkTimeEt { get; set; }
public int? death { get; set; }
public int? hospitalized { get; set; }
public object hospitalizedDischarged { get; set; }
public DateTime? dateChecked { get; set; }
public object totalTestsViral { get; set; }
public object positiveTestsViral { get; set; }
public object negativeTestsViral { get; set; }
public int? positiveCasesViral { get; set; }
public int? deathConfirmed { get; set; }
public int? deathProbable { get; set; }
public int? totalTestEncountersViral { get; set; }
public int? totalTestsPeopleViral { get; set; }
public object totalTestsAntibody { get; set; }
public object positiveTestsAntibody { get; set; }
public object negativeTestsAntibody { get; set; }
public object totalTestsPeopleAntibody { get; set; }
public object positiveTestsPeopleAntibody { get; set; }
public object negativeTestsPeopleAntibody { get; set; }
public object totalTestsPeopleAntigen { get; set; }
public object positiveTestsPeopleAntigen { get; set; }
public int? totalTestsAntigen { get; set; }
public object positiveTestsAntigen { get; set; }
public string fips { get; set; }
public int? positiveIncrease { get; set; }
public int? negativeIncrease { get; set; }
public int? total { get; set; }
public int? totalTestResultsIncrease { get; set; }
public int? posNeg { get; set; }
public object dataQualityGrade { get; set; }
public int? deathIncrease { get; set; }
public int? hospitalizedIncrease { get; set; }
public string hash { get; set; }
public int? commercialScore { get; set; }
public int? negativeRegularScore { get; set; }
public int? negativeScore { get; set; }
public int? positiveScore { get; set; }
public int? score { get; set; }
public string grade { get; set; }
}
}
輸出:

uj5u.com熱心網友回復:
假設您的日期整數是 yyyymmdd 格式:
int date = 20210307;
int year = date / 10_000;
int month = (date - year * 10_000) / 100;
int day = date % 100;
DateTime dateTime = new DateTime(year, month, day);
一旦你有了你的DateTime,你可以按照你喜歡的方式使用正常的日期格式來格式化它。
(您也可以通過將整數轉換為字串然后決議它來做到這一點,但顯然效率要低得多 - 這可能并不重要......)
uj5u.com熱心網友回復:
您不需要將字串決議為 int。如果您已經將它作為字串接收,則可以使用 DateTime.TryParseExact() 像這樣決議它:
using System;
using System.Globalization;
public class Program
{
public static void Main()
{
var myDate = "20220901";
DateTime result;
DateTime.TryParseExact(myDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out result);
var newDateFormat = result.ToString("yyyy/MM/dd");
Console.WriteLine(newDateFormat);
}
}
這會給你:“2022/09/01”
您可以通過指定格式字串來“翻轉”:
//put year last (Day/Month/Year):
var newDateFormat = result.ToString("dd/MM/yyyy");
這將為您提供:“01/09/2022”
uj5u.com熱心網友回復:
int sampleDate = 20210307;
var dateFormat = DateTime.ParseExact(sampleDate.ToString(), "yyyyMMdd",
CultureInfo.InvariantCulture).ToString("yyyy/MM/dd");
結果:
“2021/03/07”
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512119.html
標籤:C#约会时间整数西装外套
