Azure search service datetime conversion - azure-cognitive-search

I'm started using azure search service and i have roadblock for now.
I have modified-by column in my native DB table, which is actually part of my retrieve data from azure search. Native DB column always has date time in UTC format now when we retrieve BL layer does the conversion based on User Locale.
Do we have anyway to convert UTC to locale date in azure search as my search is independent and not passing through my BL layer to avoid slow down in search.

Azure Search accepts date/time values with full time zone information (Edm.DateTimeOffset -- e.g. 2012-12-03T07:16:23-07:00) and then normalizes them to UTC for storage purposes. Azure Search itself will not convert date/times to different time zones for you. If you need to convert for the locale of each user on a per-search basis, then you will need to do the conversion on the client side.
If your search client is a browser, then maybe this solution will work for you: Convert UTC date time to local date time using JavaScript

Related

How to store date and time in UTC in SQL Server datetimeoffset with JDBC

My Spring Boot application requires to store and express all dates and times in UTC, so the POJOs in the application use OffsetDateTime data type and the SQL Server 2016 database use datetimeoffset(7) column type. The JDBC library is ms-sql 6.1.0.0, a JDBC 4.2 compliant driver. Version of JVM is Oracle Java 8.
I am using Spring JDBC and NamedParameterJdbcTemplate to implement the DAO implementation class. No JPA, ORM, etc.
When inserting a record, I use the jdbcTemplate.update(String, Map<String,Object>). This appears to be working, except that values saved in the database are not the same as what I supplied via the Map. For e.g. namedParameters.put("record_datetime", someEntity.getRecordDatetime()); where that object's recordDatetime property holds the value 2018-05-31T13:20:01Z is saved in the database as 2018-05-31T20:20:01.0000000+00:00. I happen to be in a GMT-7 timezone, but the property uses a datatype of OffsetDataTime with no offset, i.e. it is GMT essentially.
I have a bigger issue on hand when trying to retrieve the value from the database. I use jdbcTemplate.queryForObject(String, Map<String,?>, RowMapper<T>) and in the RowMapper, I use resultSet.getObject("record_datetime", OffsetDateTime.class). This results in an exception:
java.sql.SQLFeatureNotSupportedException: This operation is not supported.
I tried using OffsetDateTime.ofInstant(resultSet.getObject("record_datetime", Instant.class), ZoneId.of("UTC")). Same exception as above is thrown.
This has to be a very common requirement, to be able to store values in UTC, and/or with offset values. In other applications, I employed java.util.Date and either java.sql.Date (or java.sql.Timestamp) in the DAO to persist date or date-time values, and that generally worked well. I am somehow finding this much harder to implement.

DateTime handling in AngularJS and WebAPI

I am working on a new application which already having data. The dates in database are stored in local timezone. I set webAPI formatters as DateTimeZoneHandling.Local.
The issue is, users can be in different time-zones. when they receive the dates, there are in the server's timezone.
On the client, whatever changes they do in dates, the Angular transformers change the dates to UTC before sending that to server. This time, server changes that back to it's local time and saves back to the database.
This time, the date stored is not what user's actually selected but the local date of the server and is causing inconsistency in the data.
I want this conversion to preserve the datetime at both the ends. Any suggestion?

How to change SQL Server date

We have just put an application into production which is hosted on AWS using their SQL Server RDS.
We have discovered that the database is set to UTC time, where our local development database isn't.
For example. I'm trying to insert a date of 2016-06-27 08:00. This works fine on our local server, but on AWS, the date is set to 2016-06-26 22:00
I'm trying to replicate the problem on our local server, and I changed the server's timezone to UTC, but the date gets inserted as 2016-06-27 08:00, but I should now expect it to be inserted as 2016-06-26 22:00.
Is there some SQL Server setting I need to change to have a date automatically converted to insert UTC?
The Sql Server DateTime datatype doesn't know anything about timezone. The time inserted is determined by the application posting the time. So this issue is going to be in your application, not in the database.
My recommendation would be to either:
Store all DateTime's as UTC converting them in the application before saving
Use the DateTimeOffset type which stores the timezone information as well as the time

Best Practices working with Datetimeoffset

I already asked a similar question but I didn't get the answer I want. (It's my mistake!)
I have a website with a SQLServer 2008R2 database located in one country (US for example).
Many clients from different countries access to this website. All datetime datatypes are datetimeoffset. The datetime are saved using sql server datetime in US.
What should I do to convert the dates according to the client datetime zone and do I need to save the time zone different in a table to be able to convert the datetime from the database to the client?
I would store the data as UTC (and in fact I mandate that our servers are all set to UTC time with no DST adjustments - not only does this prevent gaps and overlaps twice a year, but it also makes job scheduling etc. much more predictable and reliable).
You can easily convert UTC data to any other time zone. You can use a calendar table to get the offset correctly and to account for things like DST. See how to convert all datetime columns in a sql server 2005 express database with data to UTC, Where to set a UTC datetime value in n-tier application: Presentation Layer, Domain, or Database?, How do I handle the timezones for every Chat message and http://web.archive.org/web/20070611150639/http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-calendar-table.html
Important: DATETIMEOFFSET is not DST-aware!

Force a default datetime format in ms access

I'm currently porting a Access 2003 app to use a SQL Server 2005 back-end, and I'm having trouble with the datetime representations.
As I understand it, the default Access behavior is to use the datetime format defined on the local machine's regional settings, as do SQL-Server. Is there a way to force Access to use another default format (other than those available in the "Format" property dropdown list), something like Format = "dd/mm/yyyy"?
My problem is that a good many forms in the app have sub-forms whose data is linked to the parent via relation implying datetime and numeric values (terrible design, I know.)
Now, when retrieving the data, the date will print ok, using a yyyy/mm/dd hh:mm:ss format, but I cannot make new entries, or inserts from the forms as SQL server will complain that the text-data overflowed the capacity for a datetime, or that the engine cannot find the parent record.
I'm using a file-based DSN to connect to the backend.
Thanks for any insight in the matter,
Pascal
Dates are stored in MS Access as numbers. You can set custom formats for controls, such as dd/mm/yyyy, but it nearly always means a deeper problem.
More info: http://office.microsoft.com/en-ie/access-help/format-property-date-time-data-type-HA001232739.aspx

Resources