[英]How to calculate start of day and end of day from a date in c#
我的C#程序中有一个日期,例如:“ 01/15/2015”,我需要将其转换为这样的字符串:“ 2015-01-15T00:00:00Z”(即天)。 我正在调用需要该格式的第三方API。
然后,我需要使用相同的日期并将其转换为:“ 2015-01-15T23:59:59Z”(即给定的一天结束)。
这就是我所拥有的,似乎可以根据我已经进行的有限测试来工作,但是我想知道这是否容易出错,或者是否有更好的方法来完成此操作。 我之前从未使用过这种格式的日期,所以我想问问那些有更多经验的人。 T23:59:59Z是服务器所在时区的一天结束时间吗?
程序示例:
class Program
{
static void Main(string[] args)
{
Search("01/15/2015");
}
private static void Search(string date)
{
//produce this:
//string startOfDay = "2015-01-15T00:00:00Z";
//string endOfDay = "2015-01-15T23:59:59Z";
DateTime temp1 = DateTime.Parse(date);
string startOfDay = temp1.ToString("yyyy-MM-ddTHH:mm:ssK") + "Z";
DateTime temp2 = DateTime.Parse(date);
string endOfDay = temp2.ToString("yyyy-MM-ddT") + "23:59:59Z";
}
}
一天的开始很容易; 您可以只使用.Date
。
仅供参考:请确保您检查文化。
class Program
{
static void Main(string[] args)
{
DateTime date;
if (DateTime.TryParse("01/15/2015", out date))
{
var startOfDay = date.Date;
Console.WriteLine(startOfDay.ToString("s") + "Z");
var endOfDay = date.ToEndOfDay();
Console.WriteLine(endOfDay.ToString("s") + "Z");
}
Console.ReadLine();
}
}
public static class DateExtensions
{
public static DateTime ToEndOfDay(this DateTime date)
{
return date.Date.AddDays(1).AddTicks(-1);
}
}
private static void Search(string date)
{
DateTime parsedDate;
if (DateTime.TryParseExact(date, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate))
{
var dateString = parsedDate.ToString("yyyy-MM-dd");
var dateStart = dateString + "T00:00:00Z";
var dateEnd = dateString + "T23:59:59Z";
}
}
这完全忽略了时区或UTC,它只是将传入的字符串转换为DateTime
表示形式,然后创建2个字符串,该字符串是该日期实例的格式,并将硬编码的开始日期和结束日期附加为字符串。
如果您想在ANSI C中完全完成此操作,那么您可以-此代码段将使您在从零开始构建时间/日期字符串的字符级上随意使用它。 干杯...
char time_str[22], swap_str[3]; // my time string to build and swap data
void append_tdata(int t_unit, char delimiter); // generic append with dl
main(void)
{
time_t t; // I believe everything here is ANSI C
struct tm *gmt; // and should be very portable
t = time(NULL);
gmt = gmtime(&t); // get zulu time
// start building my string with the year
itoa(gmt->tm_year + 1900, time_str, 10);
append_tdata(gmt->tm_mon, '-'); // YYYY-MM
append_tdata(gmt->tm_mday, '-'); // YYYY-MM-DD
append_tdata(gmt->tm_hour, 'T'); // YYYY-MM-DDTHH
append_tdata(gmt->tm_min, ':'); // YYYY-MM-DDTHH:MM
append_tdata(gmt->tm_sec, ':'); // YYYY-MM-DDTHH:MM:SS
time_str[strlen(time_str) + 1] = 0x0;
time_str[strlen(time_str)] = 'Z'; // YYYY-MM-DDTHH:MM:SSZ
// time_str build is done - do with it as you like
}
//---------------------------------------------------------------
void append_tdata(int t_unit, char delimiter)
{
time_str[strlen(time_str) + 1] = 0x0;
time_str[strlen(time_str)] = delimiter;
if(t_unit < 10) // is the number added to string only one digit?
{ // if so - pad it with a zero
swap_str[0] = '0';
itoa(t_unit, &swap_str[1], 10);
}
else
itoa(t_unit, swap_str, 10); // otherwise just give me the number
strcat(&time_str[strlen(time_str)], swap_str); // add it to my string plz
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.