У меня проблемы с часовыми поясами. Мое приложение использует Angular и MVC web api для серверной части. На моей локальной машине все работает правильно, потому что сервер и браузер находятся в одном часовом поясе. Когда я развертываю его, я получаю неправильную дату / время.
У меня есть метод сохранения:
save(individualModel: IndividualModel, applicationId?: number) {
let urlParams = new HttpParams();
if (applicationId !== null && typeof applicationId !== 'undefined') {
urlParams = urlParams.append('applicationId', applicationId.toString());
}
return this.http.post<IndividualModel>('api/Individual/Save', individualModel, {params: urlParams})
}
export class IndividualModel {
firstName: string;
middleName: string;
lastName: string;
dob: Date;
address: AddressModel;
contact: ContactModel[];
photos: PhotosModel;
constructor(
firstName?: string,
middleName?: string,
lastName?: string,
dob?: Date,
address?: AddressModel,
contact?: ContactModel[],
photos?: PhotosModel
) {
this.firstName = firstName || null;
this.middleName = middleName || null;
this.lastName = lastName || null;
this.dob = dob || null;
this.address = address || new AddressModel();
this.contact = contact || [];
this.photos = photos || new PhotosModel();
this.recordState = recordState || null;
}
}
Back-end web api
[HttpPost()]
public virtual async Task<HttpResponseMessage> Save(Individual individualModel, int? applicationId = default(Integer?)
)
{
try
{
return Request.CreateResponse(HttpStatusCode.OK, await individualModel.Save(applicationId));
}
catch (Exception ex)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
}
}
public virtual async Task<Individual> Save(int? applicationId = null, int? UserIdStamp = null)
{
using (SqlClient.SqlConnection connection = new SqlClient.SqlConnection(ConnectionString))
{
using (SqlClient.SqlCommand cmd = new SqlClient.SqlCommand())
{
cmd.Connection = connection;
if (System.Configuration.ConfigurationManager.AppSettings("CommandTimeout") != null)
cmd.CommandTimeout = System.Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings("CommandTimeout"));
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[Individual_Save]";
cmd.Parameters.AddWithNullableValue("@Id", Id);
cmd.Parameters.AddWithNullableValue("@FirstName", FirstName);
cmd.Parameters.AddWithNullableValue("@MiddleName", MiddleName);
cmd.Parameters.AddWithNullableValue("@LastName", LastName);
cmd.Parameters.AddWithNullableValue("@UserIdStamp", UserIdStamp);
if (DOB.HasValue)
cmd.Parameters.AddWithNullableValue("@DOB", DOB.Value.ToLocalTime());
cmd.Parameters.AddWithNullableValue("@ApplicationId", ApplicationId);
await cmd.Connection.OpenAsync();
using (var reader = await cmd.ExecuteReaderAsync())
{
while ((await reader.ReadAsync()))
Refresh(reader);
}
}
}
return this;
}
Что делает конвертировать в UT C правильно для моего часового пояса, но сервер отстает от меня на 3 часа. От сервера к веб-интерфейсу API 1987-04-25T00: 00: 00, который преобразуется в 25.04.1987, 12:00. С моего компьютера на сервер 1987-04-24T04: 00: 00.000Z, который преобразуется в 24.04.1987. 9 00:00 Поскольку это дата рождения человека, ее не следует конвертировать в зависимости от часового пояса.