我正在处理客户每天工作30小时的情况。
一天从凌晨6点开始,然后在第二天凌晨6点左右开始,但是当他们第二天凌晨1点到达时,则将其视为25:00。凌晨2点将是26:00小时,依此类推...
现在,我想知道,是否有办法在c#'s DateTime class
中处理此问题,或者我需要做很长的一段路程并将其全部拆分吗?
UPDATE :
这是澳大利亚的一家媒体代理商。再次说明一下,这一天从06:00 am (12 Jan 2012)
开始,到午夜24:00。现在,第二天为01:00 am (13 Jan 2012)
时,客户端将其作为25:00 hours (12 Jan 2012)
。
他们仍然每天有24小时。唯一的区别是,他们的一天从早上6点开始,而不是像我们这样的00小时。
更新:
我需要使用的典型程序的XML表示形式。
注意:已删除CHANNEL_CODE和CHANNEL_NAME。
<PROGRAMME>
<PROGRAMME_ID>1</PROGRAMME_ID>
<PROGRAMME_NAME>Mass For You At Home</PROGRAMME_NAME>
<CHANNEL_CODE>SomeCode</CHANNEL_CODE>
<CHANNEL_NAME>SomeChannel</CHANNEL_NAME>
<TX_DATE>20120101</TX_DATE>
<START_TIME>06:00</START_TIME>
<DURATION>1800</DURATION>
<AGENCY_AVAIL>C</AGENCY_AVAIL>
<SALES_AVAIL>90</SALES_AVAIL>
<SSB>N</SSB>
</PROGRAMME>
</PROGRAMME>
<PROGRAMME>
<PROGRAMME_ID>2</PROGRAMME_ID>
<PROGRAMME_NAME>Home Shopping</PROGRAMME_NAME>
<CHANNEL_CODE>SomeCode</CHANNEL_CODE>
<CHANNEL_NAME>SomeChannel</CHANNEL_NAME>
<TX_DATE>20120101</TX_DATE>
<START_TIME>26:00</START_TIME>
<DURATION>1800</DURATION>
<AGENCY_AVAIL>C</AGENCY_AVAIL>
<SALES_AVAIL>0</SALES_AVAIL>
<SSB>N</SSB>
</PROGRAMME>
因此,也许可以将
DateTime
类调整为从06:00开始到30:00结束吗? 最佳答案
这听起来有点像您的业务涉及多个时区的情况-那么,连续一天的营业时间可能会超过24小时。
但是,这并不意味着您必须调整一天的时间-一天是国际惯例,并且,除非乔恩·斯凯特(Jon Skeet)真正决定使用他无疑制造的巨型重力枪(一天之内;-)和使用它来改变地球的旋转速度,延长我们称为一天的明暗交替的时间,您最好的选择是使用移位或时隙的概念;
轮类(在您的情况下,就是一个时隙!)有一个工作日,一个时长和一个时区。然后,您可以:
最好不要将它们称为“日子”,因为这会混淆简单的术语。
在您的实例中,您甚至不必担心时区。我认为您真正需要的只是广告时段的开始日期/时间,以及广告显示的小时数。
编辑:对于您的XML,您仍然可以使用上面的概念。您可以:
1)在获取XML时将其清理并将其存储为“适当的”日期时间-因此确定UTC的开始时间是多少,并使用持续时间
2)创建一个仅将其转换为具有长度的正常日期时间表示形式的类。这种方法的好处是您还可以采用其他方法,回到源代码约定。
实际上,我认为这就是您所需要的。
例如,在上面的xml中,您可以创建一个类;这样的事情应该可以解决问题:
public class AdvertDate{
public DateTime TransmissionDate { get; set;} //Store as 06:00 on the TX_Date
public int AdvertStartTime { get; set; } //Store as 0 - 30
public int Duration { get; set; } //Store as 18 - assuming whole numbers so change if needed
public DateTime RealDate {
get{
return TransmissionDate.AddHours(AdvertStartTime);
}
}
public AdvertDate(){
}
public AdvertDate(DateTime transmissionDate, int advertStartTime, int duration){
TransmissionDate = transmissionDate;
AdvertStartTime = advertStartTime;
Duration = duration;
}
public AdvertDate ConvertRealDateTimeToAdvertDate(DateTime realDateTime, int advertDuration){
if(realDateTime.Hour < 6)
{
DateTime advertDateTime = realDateTime.AddDays(-1).Date.AddHours(6);
return new AdvertDate(advertDateTime, 24+realDateTime.Hour, advertDuration);
}
else{
return new AdvertDate(realDateTime.Date.AddHours(6), realDateTime.Hour, advertDuration);
}
}
public void LoadFromXml(){
//Xml Loading here (or in a dedicated class or wherever)
}
}