|
A DateTime value always has a time component, even if it's zero. The Date property returns a DateTime value where the time component is set to zero, just as you do in line 2.
Verghese wrote: row["ADMISSION_DATE"] = DateTime.Parse(row["MM"].ToString() + "/" + row["DD"].ToString() + "/" + row["CC"].ToString() + row["YY"].ToString().ToString()) ;
If you already have the components of the date as numbers, don't format them into a string just to parse into a date. There is a perfectly good constructor for the DateTime structure that takes numbers:
row["ADMISSION_DATE"] = new DateTime((int)row["CC"] * 100 + (int)row["YY], (int)row["MM"], (int)row["DD"]);
Verghese wrote: 3rd Line displays the Date (08-30-08) as required but 4th line displays it as DateTime (08-29-08 12:00:00).
You are storing a string in the field, so if you display it as it is, it can't display in any other way than the way that you formatted it. The only chance that it would display with a time component, is if it's parsed into a DateTime value and the formatted into a string again using a different format.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Guffa, I understand that, storing a value as string cannot be displayed in any other formats unless until we parse it into some other formats.
But that's the reason why I'm parsing it into DateTime format. see the code one again......
row["ADMISSION_DATE"] = DateTime.Parse(row["MM"].ToString() + "/" + row["DD"].ToString() + "/" + row["CC"].ToString() + row["YY"].ToString().ToString()) ;
The row["MM"].ToString is a String, but I'm finally parsing it into DateTime. And after execution I could see that the "ADMISSION_DATE" field type in DataSet changes to DateTime. So from this its clear that it's getting stored as DateTime and the field type is also DateTime.
But the problem is to extract only the date thing, when I call the DataSet rows.
Hope I dindn't confused you.
|
|
|
|
|
Yes, you are storing a DateTime value in the field, and the value has a time component that is zero. Then you read the field, convert the DateTime value to a DateTime value, and use the Date property to get a DateTime value where the time component is zero from the DateTime value where the time component already is zero. Then you convert the value into a string using a format that does not even include the time component that is zero.
As the value that you finally store as a string in a field doesn't have any time information at all, the problem is not in the code that you have shown. As I said before, the only chance that this value is displayed with a time, is if it's once again parsed into a DateTime value and then formatted into a string with a different format.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Dates and times should always be stored as DateTime (when available). If they aren't, then you run into these kinds of problems.
Any formatting should be performed when the value is displayed (or written), not in the database.
And please use an ISO 8601-compliant format, e.g. YYYY-MM-DD
|
|
|
|
|
you said Reports
So if its just a question about displaying the data on the report ,
use string functions to eliminate the extra time .
Vikas Amin
My First Article on CP" Virtual Serail Port "[^]
|
|
|
|
|
Hi Vikas, if the task wud have been just to display the data on the report, thn it was easy.
See here's just the gist, my database table has dates splitted in 4 columns like DD, MM, CC, YY. Then using DataSet I'm concatenating these fields. And I'm concatenating it, bcoz I want to display the records within a particular date range. And for tht date comparison thing, it has to be in the date format and not string format.
And this comparison has to be done at the code level and not at the database level, since database doesnt have anything like a date field.
|
|
|
|
|
can you try
row["ADM_DATE"] = newDT.ToShortDateString().Remove(9)
Vikas Amin
My First Article on CP" Virtual Serial Port "[^]
modified on Thursday, July 24, 2008 5:33 PM
|
|
|
|
|
Vikas, whn i try this line
row["ADM_DATE"] = newDT.ToShortDateString().Remove(9)
it's throwing up this error:
"No overload for method 'Remove' takes '1' arguments"
|
|
|
|
|
|
Verghese wrote: database table has dates splitted in 4 columns like DD, MM, CC, YY
Which is a very poor design.
Verghese wrote: database doesnt have anything like a date field
What database doesn't have a DateTime type?
|
|
|
|
|
Dear........this is not my design, its the way how dates are always stored in AS400 Mainframe systems. I'm working on IBM iSeries Mainframe server. I have not much options on choosing the database.
Did I cleared your doubt???
|
|
|
|
|
Had you said that first, you would have gotten more sympathy.
|
|
|
|
|
dear friend, i didnt knew u were this caring...........but dont be in the assumption that it was way too funny...........
|
|
|
|
|
See example :
DateTime d = new DateTime(2008, 8, 29, 12, 0, 0);
Console.WriteLine(d.ToString("dd-MM-yy"));
|
|
|
|
|
Hi,
In crystal report I want to display data of a field of my DB in 5 columns of details view, (instead of 1).
How can I do this?
suppose I want to show names of customers, but they display in 5 columns, not they apper in one columns.
Best wishes
|
|
|
|
|
Hi,
You add a table from the toolbox to the report and define 5 columns.
Mika
|
|
|
|
|
OK - I have created a static class to add a "heartbeat" to an application (in a similar way to the way Trace and Debug classes work) thus:-
public static class Heartbeat
{
private static HeartbeatListenerCollection _listeners = new HeartbeatListenerCollection();
public static void Beat()
{
foreach (HeartbeatMonitorBase _listener in Listeners)
{
_listener.Beat();
}
}
static Heartbeat()
{
TimerCallback timerDelegate =
new TimerCallback(Heartbeat.Beat);
AutoResetEvent autoEvent = new AutoResetEvent(false);
System.Threading.Timer heartbeatTimer =
new System.Threading.Timer(timerDelegate, autoEvent, 0,1000);
}
public static HeartbeatListenerCollection Listeners
{
get { return Heartbeat._listeners; }
}
}
}
However this only gets started beating the first time the class is referred to. Does anybody have any thoughts as to how I could get this class to instantiate at startup?
|
|
|
|
|
I'd use the singleton pattern and create the heartbeat like this:
class Heartbeat
{
static readonly Heartbeat instance = new Heartbeat();
static Heartbeat()
{
}
Heartbeat()
{
}
public static Heartbeat Instance
{
get
{
return instance;
}
}
}
and init it:
Heartbeat h = Heartbeat.Instance;
anywhere in your startup code.
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
It's good - but to make things even trickier, I want to be able to instantiate the heartbeat for an application even if that application code doesn't have any reference at all to the class.
|
|
|
|
|
Why do you want this? The only thing I can imagine is to put the heartbeat class into a separate DLL and then initialize the heartbeat class using reflection, something like:
Assembly heartbeat = Assembly.LoadFile("heartbeat.dll");
string fullname = heartbeat.GetTypes()[0].FullName;
Object obj = heartbeat.CreateInstance(fullname);
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Can you modify the start sequence so that your application is started first, it inits the Heartbeat-class and then starts the actual application?
Mika
|
|
|
|
|
Duncan Edwards Jones wrote: even if that application code doesn't have any reference at all to the class
Then it won't get loaded.
Try adding a field to the class that contains the Main.
|
|
|
|
|
It will get loaded if the application .config references the class - this is how Trace Listeners get added / removed without recompiling.
|
|
|
|
|
I don't use those and I don't know what they're good for.
But now I'm wondering what the heartbeat the OP is talking about does.
I'll have to go reread the post.
|
|
|
|
|
A) I expect the class doesn't need to be instantiated until a listener is attached.
B) Is it using events? If not, why not?
C) What's it supposed to do? It seems like all it does is let the listeners know that the class is in memory, not that it's actually doing anything. I prefer my Windows Service code's "heartbeats" to be generated within the service loop itself, so I know the actual code is progressing.
There are times when a Service gets "hung up", at those times I don't want some other thread telling me that everything is going just fine.
Also, the "heartbeats" I use are merely updates to a database, so any system on the network can check the status of all my Services on all the servers. Plus the advantage that a successful "heartbeat" means that the Service can write to the database, which is an important test.
I expect all you really need is an event that you raise at different points in your code.
|
|
|
|