基本上,我试图将字符串解析为时间戳.
public static void main(String[] args) {
System.out.println("Timestamp:" + DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").parse("20180301050630663"));
}
Run Code Online (Sandbox Code Playgroud)
我有一个例外说
Exception in thread "main" java.time.format.DateTimeParseException: Text '20180301050630663' could not be parsed at index 0
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1947)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at Lob.main(Lob.java:41)
Run Code Online (Sandbox Code Playgroud)
然后我尝试这样做:
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
LocalDateTime timestamp = LocalDateTime.parse("20180301050630663", fmt);
System.out.println("Timestamp:" + timestamp);
Run Code Online (Sandbox Code Playgroud)
并得到了同样的异常错误.
我在这做错了什么?理想情况下,我想将时间戳存储到变量中,并将其与我正在读取的另一个时间戳进行比较.我怎样才能做到这一点?
我在ASP.Net页面的codebehind文件中有以下代码
txtStartDate.Text = DateTime.Today.ToString("MM-dd-yyyy");
Run Code Online (Sandbox Code Playgroud)
我希望返回"09-11-2009".但是,当我在开发服务器上运行页面时,我在文本框中看到"09-00-2009".我看不出任何理由,所以我显然遗漏了一些东西.有人有线索吗?
我希望用户能够在程序中手动输入日期时间字段的格式.我有Tedit组件.例如,如果用户输入'HH:nn',那么这是一个有效的日期时间格式字符串,并且所有日期时间组件都应该将format属性更改为this,但如果他输入'asd',则不是.有没有快速的方法来检查这一点,而无需编写自己的功能?
我正在尝试这种DateTime.TryParseExact方法,而且我遇到了一个我不明白的案例.我有一些格式和一些主题要解析每个格式应完全匹配其中一种格式:
var formats = new[]
{
"%H",
"HH",
"Hmm",
"HHmm",
"Hmmss",
"HHmmss",
};
var subjects = new[]
{
"1",
"12",
"123",
"1234",
"12345",
"123456",
};
Run Code Online (Sandbox Code Playgroud)
然后我尝试解析它们并打印出结果:
foreach(var subject in subjects)
{
DateTime result;
DateTime.TryParseExact(subject, formats,
CultureInfo.InvariantCulture,
DateTimeStyles.NoCurrentDateDefault,
out result);
Console.WriteLine("{0,-6} : {1}",
subject,
result.ToString("T", CultureInfo.InvariantCulture));
}
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
1 : 01:00:00
12 : 12:00:00
123 : 00:00:00
1234 : 12:34:00
12345 : 00:00:00
123456 : 12:34:56
Run Code Online (Sandbox Code Playgroud)
而我的问题是......为什么它在123和12345失败了?不应该成为01:23:00和01:23:45吗?我在这里错过了什么?我怎么能像我期望的那样让它工作?
更新:所以,似乎我们可能已经弄清楚为什么这是失败的.似乎H实际上抓住两个数字,然后只留下一个数字,mm然后失败.但是,有没有人对如何更改此代码有一个好主意,以便我得到我想要的结果?
另一个更新:想想我现在找到了一个合理的解决方案.添加它作为答案.将在2天内接受它,除非其他人想出更好的一个.谢谢您的帮助!
使用以下方法进行转换时,我阅读的大多数文件都是合适的时间:
// works great most of the time
private static DateTime convertToDateTime(System.Runtime.InteropServices.ComTypes.FILETIME time)
{
long highBits = time.dwHighDateTime;
highBits = highBits << 32;
return DateTime.FromFileTimeUtc(highBits + time.dwLowDateTime);
}
Run Code Online (Sandbox Code Playgroud)
这里我在visual studio中有一个例子来说明这个方法有时不起作用,例如我将在我的计算机和调试中显示实际文件.所以恰好在我的调试中的文件是:
"A:\ Users\Tono\Documents\Visual Studio 2010\Projects\WpfApplication4\WpfApplication4\obj\x86\Debug\App.g.cs"

这里是我试图转换为DateTime的FILETIME"我需要LastWriteTime"

在这里你可以看到dwHighDateTime = 30136437以及该文件中的dwLowDateTime = -2138979250.
当我运行我的方法加上其他技术时,我得到以下日期:

所以到目前为止,一切似乎都很有效.但是为什么当我在Windows中浏览并查找特定文件时,我会得到一个不同的日期!这是我在查看文件属性时得到的日期:

为什么日期不匹配?我究竟做错了什么?
另一个ParseExact问题.我正在尝试将UTC格式的字符串解析为日期时间,格式为:
"YYYY-MM-DDThh:mm:ss.ssZ"
这是UTC格式,尾随Z.由于某种原因,我无法解析它.我尝试过"u","s","o"自定义格式字符串,以及几个DateTimeStyles以及手写.文化是不变的.
由于某种原因,它不喜欢Z,这表明它是一个UTC字符串.当我删除它,解析.我很乐意,满意地摆脱尾随的Z,因为我知道它们是UTC日期时间字符串,但我不能.有任何想法吗?
我有DateTime的字符串格式的问题.我认为这是MS中的错误.你能解释一下,有什么不对吗?
class Program
{
static void Main(string[] args)
{
Console.WriteLine(DateTime.Now.ToString("M"));//return 07 July <---- WRONG, SEE MSDN
Console.WriteLine(DateTime.Now.ToString(".M"));//return .7 <---- GOOD
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试为当前实现此选项的可选时间部分创建日期时间格式
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.text.ParseException;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(Ideone.getDate("2017-07-01T00:00:00.0Z"));
System.out.println(Ideone.getDate("2017-07-01T00:00:00.00Z"));
System.out.println(Ideone.getDate("2017-07-01T00:00:00.000Z"));
}
public static LocalDateTime getDate(String date) {
try {
DateTimeFormatter formatter2 =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSS]'Z'");
LocalDateTime ldt = LocalDateTime.parse(date, formatter2);
return ldt;
} catch (DateTimeParseException ex) {
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
并有输出
空值
2017-07-01T00:00
2017-07-01T00:00
现在我的问题是,为什么有1个时间分数的日期不起作用,它正在处理2个和3个分数?它应该招待1,2和3分吗?或只有3个分数?
提前致谢
.Net具有内置的DateTime ToShortTimeString()函数,该函数使用CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern格式.它会为en-US返回类似的内容:"下午5:00".对于像de-DE这样的24小时文化,它将返回"17:00".
我想要的是一种方法,只需返回适用于每种文化的小时(上述案例中的"下午5点"和"17").什么是最好/最干净的方法?
谢谢!
我有一个.CSV文件,我正在读一个C#程序.在其中一列中,有一个日期,但它采用"通用"格式,因此它在.CSV中显示为数字.例如:41172.
如何在C#中将此数字转换为格式为dd/mm/yyyy的日期?41172相当于20/09/2012.