Save C # datetime local time between json and web api?

I have a problem when I have a datatime in a json object, it converts it to UTC timezone in C # dateTime, just want to ask how to save local time? Can I set the time zone property in the web.config file or geter or setter, because Should I mind the day and time? is this an example of a class?

public class Patient { public long RecordId { get; set; } public string Username { get; set; } public DateTime Date { get; set; } public bool Deleted { get; set; } public string ModifiedBy { get; set; } public DateTime ModifiedOn { get; set; } public string CreatedBy { get; set; } public DateTime CreatedOn { get; set; } } 

update I tried to use getter and setter to fix it. I have this exception {Cannot evaluate expression because the current thread is in a Qaru state.}

 [System.Web.Http.Route("api/postpatientform")] public HttpResponseMessage PostPatientForm(PatientViewModel form) { using (var db = new AthenaContext()) { try { var form2 = Mapper.Map<Patient>(form); db.Patient.Add(form2); db.SaveChanges(); var newId = form2.RecordId; foreach (var activity in form.PatientActivities) { activity.PatientId = newId; db.NonPatientActivities.Add(Mapper.Map<PatientActivity>(activity)); } db.SaveChanges(); } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } } return Request.CreateResponse<Patient>(HttpStatusCode.Created, null); } 
+8
c # datetime
source share
3 answers

You can change the serializer settings to use the JSON.net serializer:

 GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Unspecified, }; 

There is also a different date format you can choose: DateTimeZoneHandling

 /// <summary> /// Specifies how to treat the time value when converting between string and <see cref="DateTime"/>. /// </summary> public enum DateTimeZoneHandling { /// <summary> /// Treat as local time. If the <see cref="DateTime"/> object represents a Coordinated Universal Time (UTC), it is converted to the local time. /// </summary> Local = 0, /// <summary> /// Treat as a UTC. If the <see cref="DateTime"/> object represents a local time, it is converted to a UTC. /// </summary> Utc = 1, /// <summary> /// Treat as a local time if a <see cref="DateTime"/> is being converted to a string. /// If a string is being converted to <see cref="DateTime"/>, convert to a local time if a time zone is specified. /// </summary> Unspecified = 2, /// <summary> /// Time zone information should be preserved when converting. /// </summary> RoundtripKind = 3 } 
+9
source share

You can customize this. See: http://www.newtonsoft.com/json/help/html/SerializeDateTimeZoneHandling.htm

Here is an example:

 public void Config(IAppBuilder app) { var config = new HttpConfiguration(); var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First(); jsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local; app.UseWebApi(config); } 
+2
source share

You can use TimeZoneInfo.ConvertTime to convert to the required time zone.

Checkout this method: https://msdn.microsoft.com/en-us/library/bb382770(v=vs.110).aspx

0
source share

All Articles