GVKun编程网logo

是否有一个标准的DateTimestring表示forms作为Windows文件名有效,并且可以使用DateTime.Parse进行分析?

28

在本文中,我们将给您介绍关于是否有一个标准的DateTimestring表示forms作为Windows文件名有效,并且可以使用DateTime.Parse进行分析?的详细内容,此外,我们还将为您提供

在本文中,我们将给您介绍关于是否有一个标准的DateTimestring表示forms作为Windows文件名有效,并且可以使用DateTime.Parse进行分析?的详细内容,此外,我们还将为您提供关于.net – DateTime.Parse在XP vs Windows 7/8上有所不同、.net – Windows XP上的DateTime.ToLocalTime、.net – 为什么Windows服务不能与System.Timers.Timer或System.Windows.Forms.Timer一起正常工作、android – 格式化DateUtils.getRelativeDateTimeString的知识。

本文目录一览:

是否有一个标准的DateTimestring表示forms作为Windows文件名有效,并且可以使用DateTime.Parse进行分析?

是否有一个标准的DateTimestring表示forms作为Windows文件名有效,并且可以使用DateTime.Parse进行分析?

作为一个简单的备份过程的一部分,我想保存文件的名称,指出备份的date和时间。 现在我正在使用yyyyMMddTHHmmss ,即“20100601T115720”。 我希望能够parsing这些date,以便清理比特定date更早的文件。 (备份date时间不必与文件创builddate相同。)最终在Powershell中运行,使用如下所示的行:

Get-ChildItem $backupDirectory -filter *.bak | where { [System.DateTime]::ParseExact([System.IO.Path]::GetFileNameWithoutExtension($_),"yyyyMMddTHHmmss",[System.Globalization.CultureInfo]::InvariantCulture) -lt $oldestDate }

请注意我目前使用DateTime.ParseExact方法。 这很好,所以我想我的问题是更多的学术,但我想知道是否有一个“标准的”Windows文件名格式:

包括date和时间信息AND

可以使用标准的DateTime.Parseparsing

.net方法模仿windows默认的文件重命名行为

我可以使用单声道的AOTfunction本地“预编译”.NET DLL / EXE,使他们更难以逆向工程?

所有用户都可以在同一台电脑上写入文件夹

Windows服务应用程序挂起

我应该使用Visual Studio中哪种types的项目来创build“隐藏”工具?

如何为xbuild添加缺less的程序集引用? (单声道/ Linux)的

以C#.Netforms托pipe进程会禁用某些进程的button

使用DownloadStringAsync下载HTML源代码不会在WP8上下载整个源代码

是否有可能使用WCF与Windows内核模式软件进行通信?

为什么在Vista / 7中,RequestAdditionalTime()方法不能重新启动?

这不是“标准”文件名格式。

我通常使用yyyy-MM-dd,HH-mm-ss ,这比一个数字块更可读。

我没有找到标准的文件名格式,但是这个技巧往往会使PowerShell输出一个本地化的可读日期/时间(即2010年2月2日上午8时15分14秒):

(Get-Date | Out-String).Trim().Replace(":","-")

将Get-Date配置为Out-String将使用默认格式化程序(在本例中为当前语言环境中的时间)使日期成为可读的字符串。 修剪()从两端删除额外的换行符。 由于我知道的语言环境的时间字符串中唯一的非法字符是':',所以我简单地用' – '替换':'

这是最明显的比使用.NET的字符串格式慢一个档次。 如果你想使用相同的技巧而不使用cmdlet,你可以这样写:

$date = [DateTime]::Now ($date.ToLongDateString() + " " + $date.ToLongTimeString()).Replace(":",'-')

希望这可以帮助

.net – DateTime.Parse在XP vs Windows 7/8上有所不同

.net – DateTime.Parse在XP vs Windows 7/8上有所不同

在XP和 Windows 7上执行以下操作会在.NET4与.NET2控制台应用程序中产生不同的结果:

Console.WriteLine(String.Format("DateTime.Parse on Client: {0}",DateTime.Parse("1998-10-31T00:00:00-04:00")));

.NET4
在XP下,这将返回:10/31/1998 12:00:00 AM
在Windows 7 / Windows 8下,它返回:10/30/1998 11:00:00 PM

.NET2
在XP下,它将返回:10/31/1998 12:00:00 AM

为什么??!?

从字符串中删除TimeZone(-04:00)会导致.NET4下的XP和Windows 7上的值相同.当从字符串执行DateTime.Parse时,Windows XP似乎在.NET4下以不同的方式应用时区偏移量.有没有办法改变这种行为,以便它在.NET4下是一致的,无论操作系统如何(不涉及操纵发送到DateTime.Parse的字符串)

环境:
所有计算机都安装了最新的修补程序(可通过Windows Update获得),并配置为“东部时间”,并在“时区设置”中选中“自动调整夏令时的时钟”.

我已在使用.NET4的Windows 7计算机和使用.NET4.5的Windows 7计算机上确认了此行为

解决方法

计算历史日期的本地时间要求.NET了解在该日期期间生效的夏令时规则.这当然是一件非常棘手的事情,因为DST规则在各地和日期之间变化很大.

您的日期的UTC偏移为-4,使其位于美国东部时区附近.最相关的夏令时规则改变了2005年能源政策法案,该法案将DST从3月的第2个星期日到11月的第1个星期日生效,从2007年开始生效.因此了解当地时间1998年10月31日要求知道这项法律尚未生效.

这就是差异的来源. Windows Vista是第一个拥有这些DST更改数据库的Windows版本,.NET 4是第一个开始使用它的.NET版本. XP没有该数据库,因此.NET无法做任何事情,只是假设当前的DST规则生效.

这是您在与当地时间合作时需要处理的不可避免的损失.不要,使用UTC.

.net – Windows XP上的DateTime.ToLocalTime

.net – Windows XP上的DateTime.ToLocalTime

.NET DateTime.ToLocalTime方法的文档说明:

On Windows XP systems,the ToLocalTime
method recognizes only the current
adjustment rule when converting from
UTC to local time. As a result,
conversions for periods before the
current adjustment rule came into
effect may not accurately reflect the
difference between UTC and local time.

我正在开发Windows 7,但部署到混合环境.如何提供与ToLocalTime的Windows 7行为相匹配的一致,正确的实现?

编辑

我跑了一个测试:

static void Main()
{
    // 8 AM in July,UTC. That would have been DST,so 3 AM CDT.
    var dstDate = new DateTime(2010,7,1,8,DateTimeKind.Utc);

    // 8 AM in December,UTC. Not DST,so 2 AM CST.
    var nonDstDate = new DateTime(2010,12,DateTimeKind.Utc);

    Log("DST Date ToLocalTime: " + dstDate.ToLocalTime());
    Log("DST Date ConvertTimeFromUtc: " + ConvertTimeFromUtc(dstDate));
    Log("Expected: 3 AM July 1 2010");

    Log(string.Empty);

    Log("Non-DST Date ToLocalTime: " + nonDstDate.ToLocalTime());
    Log("Non-DST Date ConvertTimeFromUtc: " + ConvertTimeFromUtc(nonDstDate));
    Log("Expected: 2 AM December 1 2010");

    Log(string.Empty);

    Log("Date ToLocalTime Kind: " + dstDate.ToLocalTime().Kind);
    Log("Date ConvertTimeFromUtc Kind: " + ConvertTimeFromUtc(dstDate).Kind);
}

private static void Log(string message)
{
    Console.WriteLine(message);
}

private static DateTime ConvertTimeFromUtc(DateTime utcDateTime)
{
    return
        DateTime.SpecifyKind(
            TimeZoneInfo.ConvertTimeFromUtc(
                utcDateTime,TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id)),DateTimeKind.Local);
}

XP Pro 32位,SP3(作为VM)和Windows 7 Enterprise 64位的结果相同:

DST Date ToLocalTime: 7/1/2010 3:00:00 AM
DST Date ConvertTimeFromUtc: 7/1/2010 3:00:00 AM
Expected: 3 AM July 1 2010

Non-DST Date ToLocalTime: 12/1/2010 2:00:00 AM
Non-DST Date ConvertTimeFromUtc: 12/1/2010 2:00:00 AM
Expected: 2 AM December 1 2010

Date ToLocalTime Kind: Local
Date ConvertTimeFromUtc Kind: Local

文档错了吗?我可以简单地拨打ToLocalTime吗?

编辑2

我们在一个真正的XP系统(不是VM)上运行它,并在那里得到相同的结果.我的测试用例是否正确?任何人都可以提供结果会有所不同的情况吗?

解决方法

On Windows XP systems,the ToLocalTime
method recognizes only the current
adjustment rule when converting from
UTC to local time. As a result,
conversions for periods before the
current adjustment rule came into
effect may not accurately reflect the
difference between UTC and local time.

美国在2007年改变了夏令时的调整规则.

> 2006年:4月的第一个星期日,10月的最后一个星期日结束.
> 2007年:3月的第2个星期日,11月的第1个星期日结束.

问题在于他们遵循2007年所有日期的规则,而不仅仅是2007年之后的日期.DST规则在20年内没有改变,Windows XP在不同年份没有不同规则的概念.它将考虑2006年10月31日的夏令时,但实际上并非如此.

如果你只处理2007年之后的日期,那么你很好,不需要做任何特别的事情.如果您正在处理2006年或之前的日期,那么您需要检查年份,并手动应用DST偏移.

.net – 为什么Windows服务不能与System.Timers.Timer或System.Windows.Forms.Timer一起正常工作

.net – 为什么Windows服务不能与System.Timers.Timer或System.Windows.Forms.Timer一起正常工作

我最近遇到了编写Windows服务的挑战.我需要定期请求URL并检查其可用性.为此,我决定在服务的OnStart方法中初始化一个计时器,并在timer_Tick事件中完成所有工作.

我的第一种方法是使用System.Windows.Forms.Timer及其Tick事件.我选择了它,因为我正在阅读的教程.不知怎的,我无法使服务工作.它安装并启动没有问题,但它不会触发事件(我将调试器附加到进程并看到它没有被触发).我认为在Windows服务中使用Forms计时器可能不是一个好主意,因此我决定切换到System.Timers.Timer并利用其Elapsed事件.这也不起作用.我在Windows窗体应用程序中尝试了两种提到的方法,但它们都有效.

经过一番挖掘后,我发现这个网站:http://weblogs.asp.net/sibrahim/archive/2004/01/13/58429.aspx,博主建议使用另一个计时器:System.Threading.Timer.我第三次改变了这种方法,BOOM开始像魅力一样工作.

我的问题是:为什么我不能在Windows服务中使用其他计时器,为什么找到有关它的信息这么困难?

System.Windows.Forms.Timer计时器使用UI的消息泵来编组tick事件,默认情况下服务不运行消息泵,因此没有一点额外的工作,System.Windows.Forms.Timer计时器将不会工作.

System.Timers.Timer是一个基于服务器的计时器,并在您创建它的线程上引发一个事件(我认为).如果这不起作用,也许你没有启动计时器或计时器在一个立即结束的线程上运行(因为,没有任何东西保持线程活着,所以它完成).

http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

System.Threading.Timer计时器使用在ThreadPool线程上运行的回调,并且根本不依赖于消息泵,因此这有效.

当您在WinForms项目中运行Application.Run(myForm)时,该调用也会运行消息泵,这将管理UI消息.您提到的Windows计时器是一个UI组件,并期望消息泵运行,以便在UI线程上发生tick事件.

看看这里在Windows服务中运行消息泵:

Message pump in .NET Windows service

进一步阅读:

http://support.microsoft.com/kb/842793

总之,我只是使用System.Threading.Timer类.

android – 格式化DateUtils.getRelativeDateTimeString

android – 格式化DateUtils.getRelativeDateTimeString

我有这样的代码
DateUtils.getRelativeDateTimeString(context,due,DateUtils.MINUTE_IN_MILLIS,DateUtils.WEEK_IN_MILLIS,0)

这是输出格式化的字符串

in 23 hours,6:18am

我对android documentation这个方法不太了解.

有没有一个内置的方式来剥离时间或更改逗号更多的句子像?

“23小时”或“上午6时18分23时30分”优于目前的产出.

谢谢.

解决方法

我用了不同的方法,得到了我想要的“23小时”的结果
DateUtils.getRelativeTimeSpanString(due,Now,DateUtils.SECOND_IN_MILLIS)

今天关于是否有一个标准的DateTimestring表示forms作为Windows文件名有效,并且可以使用DateTime.Parse进行分析?的讲解已经结束,谢谢您的阅读,如果想了解更多关于.net – DateTime.Parse在XP vs Windows 7/8上有所不同、.net – Windows XP上的DateTime.ToLocalTime、.net – 为什么Windows服务不能与System.Timers.Timer或System.Windows.Forms.Timer一起正常工作、android – 格式化DateUtils.getRelativeDateTimeString的相关知识,请在本站搜索。

本文标签: