Wil*_*lem 23 .net c# datetime c#-4.0
我正在处理客户每天30小时的情况.
这一天从早上6点开始,然后在第二天上午6点左右开始,但是当他们第二天凌晨1点到达时,他们将其视为25:00.凌晨2点将是26:00等等......
现在,我想知道,有没有办法解决这个问题,c#'s DateTime class
或者我是否需要做很长的事情并将其全部拆分?
更新:
它是澳大利亚的媒体代理商.再来一次解释,这一天从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>
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法调整DateTime
课程从06:00开始到30:00结束?
das*_*ash 20
这听起来有点像你有一个覆盖多个时区的业务的情况 - 那么,有可能连续一天超过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)
}
}
Run Code Online (Sandbox Code Playgroud)
始终以一些通用标准格式存储数据,并将任何其他要求仅视为显示/输出格式.
处理源自不同时区(与服务器不同或客户端之间)的日期/时间时,最好使用C#DateTimeOffset结构以及SQL Server 2008 R2 的datetimeoffset字段类型存储它们.
这使您不仅可以确定"通用时间",还可以了解相对于任何给定客户的时间.
您尚未说明30小时工作日的实际用途,因此我无法在没有更多信息的情况下提供详细信息,但正如其他人所说,您需要为您的时髦日期输出提供自定义类.