Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 638
  • Last Modified:

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
0
chrispaton
Asked:
chrispaton
  • 5
  • 4
1 Solution
 
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
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
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
 
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
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.

Join & Write a Comment

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 5
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now