我有这个方法:
public static DateTime GetDatetime(string ampm, string hour, string minute)
{
int iHour = Convert.ToInt32(hour);
int iMinute = Convert.ToInt32(minute);
if (ampm == "PM" && iHour != 12)
iHour = 12 + iHour;
DateTime dtTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
DateTime.Now.Day, iHour, iMinute, 0);
return dtTime;
}
基本上接受AM / PM和小时和分钟并给出DateTime。我提供输入
DateTime startTIme = GetDatetime("AM", "12", "30");
我早上12:30在我的本地机器上得到正确的时间。但是,当我在服务器上运行相同的方法时,我得到12:30 PM。这让我疯了。有人可以帮帮我吗?我做错了什么?
更新
我的新功能是:
public static DateTime GetDatetime(string ampm, string hour, string minute)
{
int iHour = Convert.ToInt32(hour);
int iMinute = Convert.ToInt32(minute);
if (ampm == "PM" && iHour != 12)
iHour = 12 + iHour;
else if (ampm == "AM" && iHour == 12)
iHour = 0;
DateTime dtTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
DateTime.Now.Day, iHour, iMinute, 0);
return dtTime;
}
这似乎工作正常。任何人都可以在此代码中找到任何问题吗?
答案 0 :(得分:2)
当使用GetDatetime("AM", "12", "30");
正如Eric所说,你得到不同结果的原因可能是两台计算机以不同的方式打印出日期。
例如,使用我的设置,结果为:
2012-05-03 12:30:00(我计算机格式的中午半小时)
使用美国设置后,结果为:
2012年5月3日下午12:30:00(美国格式中午半小时)
要在两台计算机上以相同方式打印日期,您可以指定用于日期格式的文化信息:
DateTime dateResult = GetDatetime("AM", "12", "30");
string strResult = dateResult.ToString(System.Globalization.CultureInfo.GetCultureInfo("en-US"));
在所有计算机上,strResult将具有以下值:5/3/2012 12:30:00 PM
但最重要的是,你应该修改你的代码以获得预期的结果(上午12点应该是午夜,而不是中午)。
答案 1 :(得分:1)
请检查当前的文化:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-us");
因为在不同的文化中,日期以不同的格式书写。例如(可能是第3次)= 3/5/2012或5/3/2012等等
http://msdn.microsoft.com/en-us/library/system.threading.thread.currentculture.aspx
答案 2 :(得分:1)
您只需使用DateTime.Parse()
(msdn link)(或TryParse()
)方法即可。请看下面的示例代码:
string[] times = new string[]
{
"00:00 AM"
, "01:00 AM"
, "10:00 AM"
, "12:00 AM"
, "00:00 PM"
, "01:00 PM"
, "10:00 PM"
, "12:00 PM"
};
foreach (var time in times)
{
DateTime date = DateTime.Parse(time);
Console.WriteLine(date);
}
提供输出:
03/05/2012 00:00:00
03/05/2012 01:00:00
03/05/2012 10:00:00
03/05/2012 00:00:00
03/05/2012 12:00:00
03/05/2012 13:00:00
03/05/2012 22:00:00
03/05/2012 12:00:00
在您的情况下,只需创建一个包含“小时”的字符串:“分钟”+“AM”或“PM”。在代码中(如果你的输入无效,Parse()方法抛出一个异常或者一个非常奇怪的结果)):
public static DateTime GetDatetime(string ampm, string hour, string minute)
{
return DateTime.Parse(hour + ":" + minute + " " + ampm);
}
答案 3 :(得分:0)
您的机器未设置为使用24小时制
服务器是。
以通常的方式改变,一切都会好的:)
如何: