DatetimePicker automatic conversion C# - c#

I am using C# and I am setting the value of the date time picker to my date from my database. But the format I have in database is different from the format of the Date Time Picker. Is there a way to automatically change the format of my database date to that of the date time picker. I have searched for it but I haven't found it.
I will appreciate your help.

But the format I have in database is different from the format of the Date Time Picke
You are making the mistake of thinking the database has any associated display format when storing a DATETIME - it doesn't - there is an internal representation. All you see is how the date is represented when you view it in some tool.
If your database uses a DATETIME column, as it should, then there is not issue.

Related

Visual Studio Website how to get date data type without time in table

I created a simple website that shows some tables. I created a database from App_Data folder and created some tables. A table has a column of AddDate and its datatype is date.
I want to get only date without time. Currently my website shows the date like this:
1/30/2017 12:00:00 AM
I want to get the date such as Jan, 30 2017.
Here's what I did:
I created a database named TestDB adding from App_Data.
From the database, I added a table and added a column called AddDate.
Its datatype is date.
I selected data from the datatype drop-down of the AddDate column, but I get data with time as shown above.
How do I set date datatype without time in table in Visual Studio?
Update: 6/11
I could get only date by adding {0:d} in the property of the grid view.
For reference:
BoundField.DataFormatString Property
I think this is what you want:
var customDateFormat = yourDate.ToString("MMM, dd yyyy");
You can look into DateTime.ToString method in order to see how you can convert a datetime in the format you are expecting.
There is a slight disconnect between the database layer and the C# code layer logic that we all have to deal with from time to time, in C# DateTime is used for values that are DateOnly and those that carry a time as well.
When storing these values in SQL we can choose to use a Date data type and the time information will simply be omitted.
In your code you can use the .Date property to ignore the time component and return a date value that has a zero (midnight) time value.
So we accept that the runtime data type to use is DateTime now the only concern is how to render the value in the format that you have requested.
The DateTime datatype has a .ToString(string format) method that can be used at the point that you need to visualise the value.
var formattedDate = dateValue.ToString("MMM, dd yyyy");
If you are using Entity Framework or nHibernate ORM Frameworks then they have in built conventions for specifying that the data column data type should be a Date instead of a DateTime, but within your C# code you should use the DateTime data type to hold the date value.
You should use your DateTime like this:
DateTime time = DateTime.Now; // you datetime value
DateTime.Now.ToString("MMMM", CultureInfo.InvariantCulture);
and add using System.Globalization; in the top of of your class
you can also see this link:
How to get full date with full month name like 02 November 2015

Force DateTime to show exactly what stored in the database regardless of timezone

We have a DateTime column in a table wherein we store date selected in a dropdownlist from the UI
we are saving it with the default DateTime.Unspecified
So in the database it stored like this
Now the problem is we want to display this in the client as it is, meaning display this datetime as it is regardless of timezones
So currently what we did is just get the datetime value from the database and trim the 00:00:00, but somehow, we are encountering problem that it displays differently in clients in different timezone like for example in -2 Timezone, it displays one day behind.
Any idea how should we approach this? changing the database column to datatimeoffset is not an option for this. We just want to force it to be displayed as it is.
The DateTime class has some property that can adjust the display like :
DateTimeKind.Utc
or
DateTime d = DateRetreived.ToUniversalTime()
In your case, I think you just need to put your dates in UTC format before sending it in the display.
See this question :
How can I format DateTime to web UTC format?
Documentation :
https://msdn.microsoft.com/en-us/library/system.datetime.specifykind(v=vs.110).aspx

How to format a Date into SQL server using EntityFramework

I'm trying to storage into my database ONLY the DATE not DATE AND TIME, only Date, but it always came with the time together.
This is how I do to storage only the date inside of String :
string.Format("{0:dd/MM/yyyy}", DateTime.Now)
And works fine, but now, I want to storage a StringDate to a Date in my SQL Server database. So I did this :
EntityTable...
[Column(TypeName = "date")]
public DateTime? InicialDate { get; set; }
Controller
InicialDate = DateTime.ParseExact("01-12-2016",
"dd/MM/yyyy",
new CultureInfo("pt-BR"));
And inside of my Table, the Date is not at the right format as I expected, I came like this :
2017-12-01 and not, DAY-MONTH-YEAR....
And if I try to make a query and retrieve the date, i came like this :
"InicialDate": "2017-12-01T00:00:00"
I just want to save ONLY the DATE without time!
Correct way is creating your Date type for using whole project. Also there is some Data class already developed: https://github.com/claycephas/csharp-date
If you've already created the table with [Column(TypeName = "date")], please check the schema and data of the table, the type of column InicialDate should be date, which doesn't save the time portion of datetime.
The time portion you saw in the result (i.e. T00:00:00) was appended by EF, when it was cast to DateTime structure.
DateTime is internally just a single number (probably an int/long, representing the number of seconds since the Epoch; not sure about this, though; but it doesn't really matter here) and how it's displayed as a string depends on the format used. DateTime.ParseExact("01-12-2016", "dd/MM/yyyy", new CultureInfo("pt-BR")); parses the date into DateTime internal representation according to the pt-BR rules for displaying date, then when EF is posting this to the db it converts the internal representation to ISO-8601 textual form (because SQL is text-based), then the db engine again converts it into a number form and stores it. When you look in the db, you see it as 2017-12-01, because the tool you use to do this is set up to display dates in the ISO-8601 format.
So, the date is stored correctly, what you seed depends on the format the particular app uses to display dates.
Change DateTime to nvarchar(10) in database if u use DateTime in database 00.00.00 will be automatically assigned by database. So, you are getting time with it while retrieving.
Change column datatype to Varchar issue will be resolved.
Sincerely,
Thiyagu Rajendran
**Please mark the replies as answers if they help and unmark if they don't.

error in getting date from MS Access database?

Am using DevExpresss Winform. I used DateEdit to store date and in access database I used datatype as Date/Time. Now I stored Date [19-11-2013] and then while retrieve the date is come with time. like this [19-11-2013 PM 12:00:00]. But I dont need time. How to solve this error ?
That's not an error. Even if in your database you have a Date data type you get a time when you use a DateTime variable in C#. What you see is the default time 12:00 PM or 00:00 in 24h format. Note that is not Date data type in C#.
If you don't want to see the time value, just format it accordingly
Standard Date and Time Format Strings
DateTime date1 = new DateTime(2008,4, 10);
Console.WriteLine(date1.ToString("d", DateTimeFormatInfo.InvariantInfo));
// Displays 04/10/2008

C#: Sorting on date field in a Winforms app

In an sqlite database I have a date field stored as a TEXT property with the following format:
dd/mm/yyyy hh:mm:ss
(e.g., the text in the field looks like: 28/04/2009 19:15:17)
I have bound a DataGridView to the database via the GUI in VS2008. So basically all the code was automatically generated for me. When I start my app it reads the database and displays all the rows in the DataGridView. I can sort on all columns except the date column. I suspect this is because the DataGridView thinks the date column is just plain text. How do I get this to work as I want it to?
UPDATE
As far as I am aware there is no DATE type in sqlite so I have to store as TEXT. Happy to be told otherwise though.
UPDATE
The user would like to see the date in dd/mm/yyyy format.
Thank you.
If you are treating the date as a string and you want it to sort correctly as a string you should change the date format to yyyy/mm/dd hh:mm:ss, that would make the date string sortable. Ideally you should be treating the data type as a date of course.
I would do one of these (in order of preference):
Change the database so that it stores the date values as a Date type, not a string. This is "the right thing to do", since you will be able to apply sorting on all levels without any problems. It is likely to be more space efficient as well, since date types are typically just a few bytes in size.
If you can't change the database design, change the format in which you store the date text into ISO-8601 format (yyyy-MM-dd HH:mm:ss).
Create a layer in between the database and the grid where you read the data into a custom object, where the date value is represented by a DateTime field. Use DateTime.TryParseExact to parse the string from the database into your custom object.
There are a number of implementations of SortableBindingList that you can find on the internet, including one from MSDN. This blog example may help. You can use known datatypes and and get correct sorting without having to worry so much about date format strings. The only requirement would be to convert the date string from the db to a datetime in your bound objecttype.

Categories