Date as Input Parameter

Hi,

I am struggling to filter a asp.net c# query with a unix date input parameter, I am trying to filter my query results between todays date and a date 14 days later. I think I am getting mixed up with the format of the date to input into the string as I have tried a lot of diferent options but get format string error messages back when I run the page. Here is my code I have so far, ;

        DateTime DateParameter = DateTime.Today;
        DateTime DateParameter1 = DateTime.Today.AddDays(14);
        double Parameter = Util.ConvertToUnixTimestamp(DateParameter);
        double Parameter1 = Util.ConvertToUnixTimestamp(DateParameter1);
        e.InputParameters["Date"] = Parameter.ToString();
        e.InputParameters["Date1"] = Parameter1.ToString();

I have replaced

        e.InputParameters["Date"] = Parameter.ToString();
        e.InputParameters["Date1"] = Parameter1.ToString();

with

        e.InputParameters["Date"] = "1018310400";
        e.InputParameters["Date1"] = "101952000";

which works perfectly, but when I run the first bit of code no results are displayed.


Thanks


Chris
chrispatonAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Daniel WilsonCommented:
What data type is e?  There appears to be something in the type conversions that is not as expected ...

Those values you hard-coded to test -- are they EXACTLY what Parameter.ToString() and parameter1.ToString() are returning?
0
chrispatonAuthor Commented:
This is the select parameter details;

                                                <SelectParameters>
                                                <asp:Parameter Name="Date" Type="String" />
                                                </SelectParameters>
                                                <SelectParameters>
                                                <asp:Parameter Name="Date1" Type="String" />
                                                </SelectParameters>

The values hard coded are supposed to be what the parameter and parameter1 should be returning but are not, I added the hard coded values to make sure that I was parsing something to the page and that my query was correct.
0
Daniel WilsonCommented:
>>The values hard coded are supposed to be what the parameter and parameter1 should be returning but are not.

So  Util.ConvertToUnixTimestamp is not performing properly.

Can you post its code?
0
Cloud Class® Course: Microsoft Exchange Server

The MCTS: Microsoft Exchange Server 2010 certification validates your skills in supporting the maintenance and administration of the Exchange servers in an enterprise environment. Learn everything you need to know with this course.

chrispatonAuthor Commented:
public class Util
{
    /// <summary>
    /// Convert a date time to unix timestamp
    /// </summary>
    /// <param name="date"></param>
    /// <returns></returns>
    public static double ConvertToUnixTimestamp(DateTime date)
    {
        DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
        TimeSpan diff = date - origin;
        return Math.Floor(diff.TotalSeconds);
    }

    /// <summary>
    /// Convert a unix timestamp to a date time
    /// </summary>
    /// <param name="timestamp"></param>
    /// <returns></returns>
    public static DateTime ConvertFromUnixTimestamp(double timestamp)
    {
        DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
        return origin.AddSeconds(timestamp);
    }
}


0
Daniel WilsonCommented:
What happens if you change the math.floor call to an explicit (long) cast?  And return a long?

http://andrewgunn.blogspot.com/2008/07/how-do-i-convert-unix-timestamp-into.html
0
chrispatonAuthor Commented:
I have changed the math.floor call to (long) and return a long as you suggested but it's still not returning anything.
Please help

0
Daniel WilsonCommented:
Not returning anything at all?

I've gone back to your code & put it into a quick test app -- which works.

Can you trace the app?  Are your dates being set as expected?  And the doubles called Parameter and Parameter1 -- what values do they have immediately after the call?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace UnixTime
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = util.ConvertToUnixTimestamp(dateTimePicker1.Value).ToString();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            label1.Text = util.ConvertToUnixTimestamp(DateTime.Today).ToString();
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            label1.Text = util.ConvertToUnixTimestamp(DateTime.Today.AddDays(14)).ToString();
        }
    }
 
    public class util
    {
        /// <summary>
        /// Convert a date time to unix timestamp
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static double ConvertToUnixTimestamp(DateTime date)
        {
            DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            TimeSpan diff = date - origin;
            return Math.Floor(diff.TotalSeconds);
        }
 
        /// <summary>
        /// Convert a unix timestamp to a date time
        /// </summary>
        /// <param name="timestamp"></param>
        /// <returns></returns>
        public static DateTime ConvertFromUnixTimestamp(double timestamp)
        {
            DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return origin.AddSeconds(timestamp);
        }
    }
 
}

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
chrispatonAuthor Commented:
hi daniel,  
thanks for your help.this was the code we used without the doubles and it works.
e.InputParameters["Date"] = Util.ConvertToUnixTimestamp(DateTime.Today).ToString();
e.InputParameters["Date1"] = Util.ConvertToUnixTimestamp(DateTime.Today.AddDays(21)).ToString();
much appreciated
chris

0
chrispatonAuthor Commented:
hi daniel.
thanks for your help.
this was the code without the doubles and it works
e.InputParameters["Date"] = Util.ConvertToUnixTimestamp(DateTime.Today).ToString();
        e.InputParameters["Date1"] = Util.ConvertToUnixTimestamp(DateTime.Today.AddDays(21)).ToString();
much appreciated
chris
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
.NET Programming

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.