考虑一下这个代码(预装了一个例子):
DateTime dt1 = DateTime.Parse("7/30/2010 9:33:29.1234567 AM");
DateTime dt2 = DateTime.Parse("6/30/2010 9:33:00.7654321 AM");
TimeSpan ts = dt1 - dt2;
Console.WriteLine(string.Format( "{0:d.hh:mm:ss.ff}", ts ));
Run Code Online (Sandbox Code Playgroud)
这是我至少从.NET 1.1开始工作的一段代码的代表.
它在1.1到3.5中运行良好,具有以下输出(对于这些dummied up输入):
30.00:00:28.3580246
Run Code Online (Sandbox Code Playgroud)
但现在我发现它在.NET 4中死了,并显示错误消息:
Input string was not in a correct format.
因此,就好像.NET 4突然决定它不喜欢这种格式的时差.将线路更改为,比方说
Console.WriteLine(string.Format( "{0}", ts.ToString("d.hh:mm:ss.ff") ));
Run Code Online (Sandbox Code Playgroud)
具有相同的效果.
现在我注意到的事情是,如果我只是默认,.ToString()我得到相同的输出.我认为思考过程是这是针对未来版本中默认格式变化的保险政策.但现在它看起来并不像是一种选择.
有谁知道为什么这会改变,如果我做错了什么或者是否有最佳实践方法来做我想要完成的事情?
是否有Java类或一些示例代码可以将java Date或Timestamp转换为:
"3 hours"
" 20 seconds"
"25 minutes"
Run Code Online (Sandbox Code Playgroud)
我需要在我的Web应用程序中使用这些字符串来显示生成文件所花费的时间(当然是以漂亮的打印方式:))
谢谢,
我有一个使用Entity Framework 4.1的ASP.NET WebApi项目.我试图返回一个实体并利用JSON.net进行反序列化.一切都运行良好但是当尝试使用TimeSpan属性反序列化实体时,我运行以下异常:
无法从System.String转换或转换为System.TimeSpan.
查看堆栈跟踪显示:
JsonSerializationException:将值"PT17H9M43.1671969S"转换为类型"System.TimeSpan"时出错.路径'TimeIn',第1行,位置890.
输出来自response.Content.ReadAsStringAsync().Result:
{ "CreatedDate": "/日期(1329851383157-0500)/", "ServicerUserId":6, "TimeIn": "PT17H9M43.1671969S", "超时": "PT17H28M43.1671969S"}
在使用JSON.net之前,我已经成功地反序列化了,System.Runtime.Serialization.JsonDataContractJsonSerializer但是我宁愿不使用这种方法.
用于从WebApi获取实体的代码
public T Get<T>(object id)
{
using (var httpClient = NewHttpClient())
{
var response = httpClient.GetAsync(_endpoint + id.ToString()).Result;
return JsonConvert.DeserializeObject<T>(response.Content.ReadAsStringAsync().Result);
}
}
Run Code Online (Sandbox Code Playgroud)
WebApi控制器中用于返回实体的代码:
// GET /api/services/5
public Service Get(Guid id)
{
var entry = db.Services.Find(id);
if (entry == null)
throw new HttpResponseException(HttpStatusCode.NotFound);
return entry;
}
Run Code Online (Sandbox Code Playgroud)
任何关于如何反序列化TimeSpan的想法都将不胜感激.
我想创建一个Windows窗体应用程序,它只显示一个计时器:
xx天xx小时xx分钟xx秒
有谁知道如何解析json timespan对象?我想将UTC时间跨度返回到我的视图,然后将其转换为本地客户端时间,但我没有找到任何有关如何执行此操作的参考.
我正在使用mvc所以我有这个型号:
public class TimeSpanModel
{
public TimeSpan StartTime { get; set; }
public TimeSpanModel()
{
this.StartTime = DateTime.UtcNow.TimeOfDay;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我将此模型返回到我的视图中,如下所示:
public ActionResult GetTimeSpanInfo()
{
TimeSpanModel tsm= new TimeSpanModel ();
return Json(tsm);
}
Run Code Online (Sandbox Code Playgroud)
我从视图中这样打电话:
$.ajax({
type: 'POST',
url: '@Url.Content("~/Controller/GetTimeSpanInfo")',
success: function (data) {
alert(data.StartTime);
var dt = new Date(data.StartTime);
alert(dt.toString());
}
});
Run Code Online (Sandbox Code Playgroud)
但在第一个警告框中,我只看到这个:[object Object]所以我试图将时间跨度转换为Date,但是在第二个警告框中,我得到了无效日期.
我是否必须将时间跨度转换为字符串,然后将该字符串与我不需要的奇怪日期连接起来以创建"有效"日期然后将其转换为本地时间,然后从中提取时间?
或者是使用TimeSpans更简单,更优雅的方式,还是只是日期时间值的时间部分?
谢谢你的帮助.
PS获取UTCnow时间仅将其转换为本地时间似乎很愚蠢,但我最终将从db表中获取此UTC时间值 - 键入时间(0).我上面发布的方法只是一种较短的方法来测试如何从db中获取该值然后在模型中设置值.
我有一个TimeSpans列表,我需要检查它们中的任何一个是否超过5小时.我知道我可以循环遍历列表,但如果可能的话我宁愿使用List <>的内置函数之一来检查条件.
if (driverSchedules.GetAllShifts().Contains(delegate(TimeSpan ts) { return ts > new TimeSpan(5,0,0);}))
{
return true;
}
Run Code Online (Sandbox Code Playgroud)
*GetAllShifts返回一个List.
我得到的错误说:
"Cannot convert anonymous method to type 'System.TimeSpan' because it is not a
delegate type"
Run Code Online (Sandbox Code Playgroud)
据我所知,"委托类型"是 System.TimeSpan
TimeSpan Ts = new TimeSpan(5, 4, 3, 2);
return Ts.ToString("?");
Run Code Online (Sandbox Code Playgroud)
我应该用问号代替什么表达式来获得这种格式: 5d:4h:3m:2s?
我试图从"jira time notation"输入的用户输入中提取分钟数.
例如,我想实现以下结果
从研究中,我发现TimeSpan.ParseExact,但我无法弄清楚如何使用它来实现我的需要.
非常感谢所有的帮助.
我的代码到目前为止:
public static int TextToMins(string TimeText)
{
CultureInfo culture = new CultureInfo("en-IE");
string[] formats = { "What goes here?" };
TimeSpan ts = TimeSpan.ParseExact(TimeText.Trim().ToLower(), formats, culture);
return Convert.ToInt32(ts.TotalMinutes);
}
Run Code Online (Sandbox Code Playgroud) 我的1.08:43:23文本框中有一个值,等于1d,08:43:23.我想将值转换为十进制为我将其乘以另一个十进制值,但是当我使用Convert.ToDecimal它时返回错误
输入字符串不是有效格式
是Convert.ToDecimal不适合这种转换?有没有办法从这样的输入创建一个十进制值?