I have read numerous help text and tried several different approaches to the problem with no success.
When I simply have the code line.Cells[5].Value = vo2.Rows[0]["Start"].toString(); I get 3/9/2019 8:00:00 as the result in the datagridview. I want this to be dd/mm/yyyy format.
How can I achieve this?
SmartsheetDataAdapter dataAdapter4 = new SmartsheetDataAdapter(sql10, connection);
DataTable vo2 = new DataTable();
dataAdapter4.Fill(vo2);
//double vocost = 0;
if (vo2.Rows.Count > 0)
{
DateTime thisdate = new DateTime(vo2.Rows[0]["Start"]);
//DateTime deldate = DateTime.ParseExact(dd1, "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
line.Cells[5].Value = thisdate.ToString("dd/M/yyyy");
Current code gives an error:
Argument 1: cannot convert from 'object' to 'long'
You get the error because the DateTime constructor takes a long but you pass an object:
DateTime thisdate = new DateTime(vo2.Rows[0]["Start"]);
I guess that the first column in the DataTable is already aDateTime, then use this:
DateTime thisdate = vo2.Rows[0].Field<DateTime>("Start");
Otherwise you have to parse it, for example:
string dtVal = vo2.Rows[0]["Start"].ToString(); // 3/9/2019 8:00:00
DateTime thisdate = DateTime.ParseExact(dtVal, "d'/'M'/'yyyy h:mm:ss", null);
or even simpler, because with this input you don't need ParseExact but you can use Parse:
DateTime thisdate = DateTime.Parse(dtVal);
You should Convert the value read (note, that vo2.Rows[0]["Start"] is of type object when you want DateTime):
DateTime thisdate = Convert.ToDateTime(vo2.Rows[0]["Start"]);
// MM - if you want leading zero; note, that "mm" stands for minutes
line.Cells[5].Value = thisdate.ToString("dd/MM/yyyy");
Explanation of what's going on:
vo2.Rows[0]["Start" is of type object
new DateTime(long ticks) wants single long argument
The compiler complains of the argument's type given (if you call the constructor with one it must be of type long)
Related
I have a string ("CompletionDate") which contains the value "2/28/2017 5:24:00 PM"
Now I have 2 variables (EDate and ETime). I want to assign the Date to EDate (i.e 2/28/2017) and Time to ETime (i.e. 5:24:00 PM).
How can I split the Date and Time from a single string.
Kindly Help.
My approach right now is like :
string CompletionDate = string.Empty;
string ProjectEDate = string.Empty;
string ProjectETime = string.Empty;
CompletionDate = "2017-03-29 12:58:00";
DateTime dt = DateTime.ParseExact(CompletionDate, "yyyy-MM-dd", CultureInfo.CreateSpecificCulture("en-us"));
DateTime dt1 = DateTime.ParseExact(CompletionDate, "HH:mm:ss", CultureInfo.CreateSpecificCulture("en-us"));
var ProjectEDate = dt.ToString();
var ProjectETime = dt1.ToString();
But its throwing exception that string is not in correct format. Kindly help
#Chris pointed one of your problems, but you have one more. You are passing full date time string and trying to treat it as date or time only, which is not true. Instead I suggest you to parse DateTime object with both date and time, and then take whatever you need from parsed object:
CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-us");
DateTime dt = DateTime.ParseExact(CompletionDate, "yyyy-MM-dd HH:mm:ss", enUS);
var ProjectEDate = dt.Date.ToString();
var ProjectETime = dt.TimeOfDay.ToString();
You need to specify the full format as same as the input string to parse method.
DateTime dt = DateTime.ParseExact(CompletionDate, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CreateSpecificCulture("en-us"));
To get results you can use below methods available by default in DateTime.
dt.ToShortTimeString()
"12:58 PM"
dt.ToLongTimeString()
"12:58:00 PM"
dt.ToLongDateString()
"Wednesday, March 29, 2017"
dt.ToShortDateString()
"3/29/2017"
Or you can specify the format to ToString method.
dt.ToString("yyyy-MM-dd")
"2017-03-29"
dt.ToString("HH:mm:ss")
"12:58:00"
DateTime.ParseExact(CompletionDate, "yyy-MM-dd", ...
You are missing 4th 'y' in date format string:
"yyyy-MM-dd"
^
here
and:
String was not recognized as a valid DateTime " format dd/MM/yyyy"
Why do you parse into DateTime and then convert to a string using ToString again? CouldnĀ“t you just simply use String.Split when all you want is to split the time from the day and you know the exact format?
var CompletionDate = "2017-03-29 12:58:00";
var tmp = CompletionDate.Split(' ');
var ProjectEDate = tmp[0];
var ProjectETime = tmp[1];
I am using this code to truncate datetime from my database into its year and time components. The variables YearOfRelease and Runtime contain datetime of the format "dd/MM/yyyy hh:mm:ss" It was working fine previously but its now giving the error:
String reference not set to an instance of a String.
Parameter name: s
It could only be something wrong in the DateTime.ParseExact function, could anyone please let me know why 'null' is suddenly causing this problem when previously it was working perfectly?
DateTime dt2 = new DateTime();
dt = DateTime.ParseExact(YearOfRelease, "dd/MM/yyyy hh:mm:ss", null);
Year = dt.Year.ToString();
dt2 = DateTime.ParseExact(RunTime, "dd/MM/yyyy hh:mm:ss", null);
string hour = dt2.Hour.ToString();
string min = dt2.Minute.ToString();
Time = hour + ":" + min;
The first parameter of DateTime.ParseExact is a string parameter named 's'.
Therefore, it looks like YearOfRelease or RunTime is null in your program. Make sure those are set before you call DateTime.ParseExact.
In a variable of DateTime typeI have this value = {30/07/2014 0:00:00}
I want only the date:
var aux = pedido.ord_cus_deliv_date.ToString().Split(' ')[0];
with it I obtain 30/04/2014 correctly
but when I want to convert in MM/dd/yyyy using:
var aux2 = DateTime.ParseExact(aux, "MM/dd/yyyy", null);
I have this error:
the string is represents one DateTime not admited in the GregorianCalendar
Why I have this error in aux2?
The problem is your locale setting. Calling ToString() without parameters on a date value produces a string with the pattern day,month,year arranged differently between locales. (And I suppose that you get a string arranged with Day,Separator, Month, Separator, Year).
Passing that string to DateTime.ParseExact with a specific pattern (MM/dd/yyyy) requires the string to be in the exact pattern required Month, Day, Year for your example.
You could force the invariant culture in your conversion with
var aux = pedido.ord_cus_deliv_date.ToString(CultureInfo.InvariantCulture).Split(' ')[0];
this produces a string with the pattern required by the subsequent ParseExact mask
However it is not clear why you need these conversions. A date is not a string and you simply keep it as a date and use the conversion only when you need to represent it somewhere (display, print etc...)
Console.WriteLine("Date is:" + pedido.ord_cus_deliv_date.ToString("MM/dd/yyyy"));
When you call below :
var aux = pedido.ord_cus_deliv_date.ToString().Split(' ')[0];
This gives you code "07-30-2014" and not "07/30/2014" and that's generate the error while conversion. So to get "07/30/2014", you have to write
var aux = pedido.ord_cus_deliv_date.ToString(CultureInfo.InvariantCulture).Split(' ')[0];
Below is overall code for you:
DateTime value = DateTime.Parse("30/07/2014 0:00:00"); //your date time value
var aux = value.ToString(CultureInfo.InvariantCulture).Split(' ')[0];
DateTime dt = DateTime.ParseExact(aux, "MM/dd/yyyy", CultureInfo.InvariantCulture);
var aux2 = dt.ToString(CultureInfo.InvariantCulture).Split(' ')[0]);
I hope this will help you
Regards,
Sandeep
I am trying to format date in a specific order
Time = DateTime.Parse(p.Time.ToString("dd-MM-yyyy HH:mm:ss"))
Data type of Time is DateTime
But i am getting this error:
No overload for method "ToString" takes 1 arguments.
p is the object of the table from which i am getting Time.
List<ProductImageMapWrapper> lstpm = new List<ProductImageMapWrapper>();
lstpm = _db.ProductImageMaps.Where(i => i.ClientId == null && i.BrandId == null).Select(p => new ProductImageMapWrapper
{
Time= // Problem here
}
Now, I tried using it this way
Time = DateTime.Parse(string.Format("{dd-MM-yyyy HH:mm:ss}", p.Time))
but then i got this error:
LINQ to Entities does not recognize the method System.DateTime Parse(System.String) method, and this method cannot be translated into a store expression.
String Time = Convert.ToDateTime(p.Time).ToString("dd-MM-yyyy HH:mm:ss");
It looks to me like the Time property of both types (ProductImageMap and ProductImageMapWrapper) is a DateTime. If that is true, then you should use Time = p.Time
There's a common misconception that a DateTime value somehow has a format. Actually, you apply a given format when you convert the DateTime value into a string. To copy a DateTime value from one place to another, just assign it.
parenthesis are in the wrong place. You cannot parse it as that format. You have to parse P, then format as the string.
DateTime.Parse(System.DateTime.Now).ToString("dd-MM-yyyy HH:mm:ss")
Here is the example how to parse date from string and you can correct this for your structure to work:
string p = "21-11-2013 11:12:13";
DateTime time = DateTime.ParseExact(p, "dd-MM-yyyy HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture);
Considering p.Time as string value in the date format you suggested, I think you want to parse string to DateTime as,
CultureInfo provider = CultureInfo.InvariantCulture;
string format = "dd-MM-yyyy HH:mm:ss"; //This should be format that you get in string
List<ProductImageMapWrapper> lstpm = new List<ProductImageMapWrapper>();
lstpm = _db.ProductImageMaps.Where(i => i.ClientId == null && i.BrandId == null).Select(p => new ProductImageMapWrapper
{
Time = DateTime.ParseExact(p.Time, format, provider)
});
Might Help
var selectQuery=from add in db.address
select add.myDate.toString("{0:dddd, MMMM d, yyyy}");
selectQuery.Distinct();
Normal Convers.
DateTime time = DateTime.Now; // Use current time
string format = "MMM ddd d HH:mm yyyy"; // Use this format
Console.WriteLine(time.ToString(format));
1.MMM display three-letter month
2.ddd display three-letter day of the WEEK
3.d display day of the MONTH
4.HH display two-digit hours on 24-hour scale
5.mm display two-digit minutes
6.yyyy displayfour-digit year
You want to use DateTime.ToString(format) not Nullable.ToString(no
overload):
DateTime? myDate = form.dteStartDate;
string sqlFormattedDate = myDate.Value.ToString("yyyy-MM-dd HH:mm:ss");
Of course this doesn't handle the case that there is no value. Perhaps something like this:
string sqlFormattedDate = myDate.HasValue
? myDate.Value.ToString("yyyy-MM-dd HH:mm:ss")
: "<not available>";
If I have a timestamp in the form: yyyy-mm-dd hh:mm:ss:mmm
How can I just extract the date from the timestamp?
For instance, if a timestamp reads: "2010-05-18 08:36:52:236" what is the best way to just get 2010-05-18 from it.
What I'm trying to do is isolate the date portion of the timestamp, define a custom time for it to create a new time stamp. Is there a more efficient way to define the time of the timestamp without first taking out the date, and then adding a new time?
DateTime.Parse("2010-05-18 08:36:52:236").ToString("yyyy-MM-dd");
You should use the DateTime type:
DateTime original = DateTime.Parse(str);
DateTime modified = original.Date + new TimeSpan(13, 15, 00);
string str = modified.ToString("yyyy-MM-dd HH:mm:ss:fff");
Your format is non-standard, so you'll need to call ParseExact instead of Parse:
DateTime original = DateTime.ParseExact(str, "yyyy-MM-dd HH:mm:ss:fff", CultureInfo.InvariantCulture);
You could use substring:
"2010-05-18 08:36:52:236".Substring(0, 10);
Or use ParseExact:
DateTime.ParseExact("2010-05-18 08:36:52:236",
"yyyy-MM-dd HH:mm:ss:fff",
CultureInfo.InvariantCulture)
.ToString("yyyy-MM-dd");
DateTime date;
if (DateTime.TryParse(dateString, out date))
{
date = date.Date; // Get's the date-only component.
// Do something cool.
}
else
{
// Flip out because you didn't get a real date.
}
Get the .Date member on the DateTime
DateTime date = DateTime.Now;
DateTime midnightDate = date.Date;
use it like this:
var x = DateTime.Now.Date; //will give you midnight today
x.AddDays(1).AddTicks(-1); //use these method calls to modify the date to whats needed.
The best (and fastest) way to do this is to convert the date to an integer as the time part is stored in the decimal part.
Try this:
select convert(datetime,convert(int, #yourdate))
So you convert it to an integer and then back to a data and voila, time part is gone.
Of course subtracting this result from the original value will give you the time part only.