- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是不是漏掉了什么? Apple 提供的方法似乎只适用于 UTC,无论机器的时区默认值如何,或者您将其设置为什么。
这是我得到的输出:
Output:
2013-02-01 10:41:24.152 Scratch[17640:c07] cal=gregorian, cal.timeZone=America/Los_Angeles (PST) offset -28800
2013-02-01 10:41:24.154 Scratch[17640:c07] date_Feb1_1400PST=2013-02-01 14:00 -0800
2013-02-01 10:41:24.156 Scratch[17640:c07] date_Feb2_1200PST=2013-02-02 12:00 -0800
2013-02-01 10:41:24.157 Scratch[17640:c07] midnights between=1
2013-02-01 10:41:24.158 Scratch[17640:c07] and then...
2013-02-01 10:41:24.159 Scratch[17640:c07] date_Feb1_2000PST=2013-02-01 22:00 -0800
2013-02-01 10:41:24.161 Scratch[17640:c07] date_Feb2_1000PST=2013-02-02 10:00 -0800
2013-02-01 10:41:24.161 Scratch[17640:c07] midnights between=0
我真正想知道的是给定时区(本地或其他时区,不一定是 UTC )
这似乎是一个如此常见且相当简单的问题,但我很惊讶地发现它是如此困惑和难以弄清楚。
我不是在寻找涉及“mod 86400”或类似肮脏内容的答案。该框架应该能够认真地告诉我这一点。
- (void)doDateComparisonStuff {
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
cal.timeZone = [NSTimeZone timeZoneWithName:@"America/Los_Angeles"];
NSLog(@"cal=%@, cal.timeZone=%@", cal.calendarIdentifier, cal.timeZone);
NSDate *date_Feb1_1400PST = [self dateFromStr:@"20130201 1400"];
NSLog(@"date_Feb1_1400PST=%@", [self stringFromDate:date_Feb1_1400PST]);
NSDate *date_Feb2_1200PST = [self dateFromStr:@"20130202 1200"];
NSLog(@"date_Feb2_1200PST=%@", [self stringFromDate:date_Feb2_1200PST]);
NSLog(@"midnights between=%d", [self daysWithinEraFromDate:date_Feb1_1400PST toDate:date_Feb2_1200PST usingCalendar:cal]);
NSLog(@"and then...");
NSDate *date_Feb1_2000PST = [self dateFromStr:@"20130201 2200"];
NSLog(@"date_Feb1_2000PST=%@", [self stringFromDate:date_Feb1_2000PST]);
NSDate *date_Feb2_1000PST = [self dateFromStr:@"20130202 1000"];
NSLog(@"date_Feb2_1000PST=%@", [self stringFromDate:date_Feb2_1000PST]);
NSLog(@"midnights between=%d", [self daysWithinEraFromDate:date_Feb1_2000PST toDate:date_Feb2_1000PST usingCalendar:cal]);
}
// based on "Listing 13" at
// https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html#//apple_ref/doc/uid/TP40007836-SW1
- (NSInteger)daysWithinEraFromDate:(NSDate *)startDate toDate:(NSDate *)endDate usingCalendar:(NSCalendar *)cal
{
NSInteger startDay=[cal ordinalityOfUnit:NSDayCalendarUnit
inUnit: NSEraCalendarUnit forDate:startDate];
NSInteger endDay=[cal ordinalityOfUnit:NSDayCalendarUnit
inUnit: NSEraCalendarUnit forDate:endDate];
return endDay-startDay;
}
- (NSDate *)dateFromStr:(NSString *)dateStr {
NSDateFormatter *df = nil;
df = [[NSDateFormatter alloc] init];
df.timeZone = [NSTimeZone timeZoneWithName:@"America/Los_Angeles"];
df.dateFormat = @"yyyyMMdd HHmm";
return [df dateFromString:dateStr];
}
- (NSString *)stringFromDate:(NSDate *)date {
NSDateFormatter *df = nil;
df = [[NSDateFormatter alloc] init];
df.timeZone = [NSTimeZone timeZoneWithName:@"America/Los_Angeles"]; // native timezone here
df.dateFormat = @"yyyy-MM-dd HH:mm Z";
return [df stringFromDate:date];
}
最佳答案
使用 this answer作为起点,我只是将日历添加为附加参数(如果需要,您可以只传递时区而不是日历):
- (NSInteger)daysBetweenDate:(NSDate*)fromDateTime andDate:(NSDate*)toDateTime usingCalendar:(NSCalendar *)calendar
{
NSDate *fromDate;
NSDate *toDate;
[calendar rangeOfUnit:NSDayCalendarUnit startDate:&fromDate
interval:NULL forDate:fromDateTime];
[calendar rangeOfUnit:NSDayCalendarUnit startDate:&toDate
interval:NULL forDate:toDateTime];
NSDateComponents *difference = [calendar components:NSDayCalendarUnit
fromDate:fromDate toDate:toDate options:0];
return [difference day];
}
这将使用您传递的日历来确定 fromDateTime
和 toDateTime
之间的午夜数,并将其作为 NSInteger
返回。确保正确设置时区。
使用上面的示例,这是输出:
2013-03-07 17:23:54.619 Testing App[69968:11f03] cal=gregorian, cal.timeZone=America/Los_Angeles (PST) offset -28800
2013-03-07 17:23:54.621 Testing App[69968:11f03] date_Feb1_1400PST=20130201 1400
2013-03-07 17:23:54.621 Testing App[69968:11f03] date_Feb2_1200PST=20130202 1200
2013-03-07 17:23:54.622 Testing App[69968:11f03] midnights between=1
2013-03-07 17:23:54.622 Testing App[69968:11f03] and then...
2013-03-07 17:23:54.623 Testing App[69968:11f03] date_Feb1_2000PST=20130201 2200
2013-03-07 17:23:54.624 Testing App[69968:11f03] date_Feb2_1000PST=20130202 1000
2013-03-07 17:23:54.624 Testing App[69968:11f03] midnights between=1
所以是的,我支持我的投票,将这个问题作为重复问题关闭,因为它非常接近您正在做的事情。 :-)
关于ios - NSDate 比较,找出特定(本地)时区的 "number of midnights between",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14653114/
美好的一天, 我目前正在使用 Django 和 Django-Background-Tasks 包。我有一个定期任务需要在午夜运行,并且每天午夜都会重复一次。 我是使用该包的初学者,并对以下内容感到困
默认情况下,Midnight Commander 中的 Ctrl-O 用于显示控制台输出。在 /etc/mc/mc.keymap我设置了ShowCommandLine到另一个键盘快捷键,现在 MC 对
我有一个 Web ssh 终端应用程序,在浏览器中使用“xterm.js”,并使用 node.js 中的“ws”和“ssh2”npm 模块连接到 ssh 服务器。我实现了一个滑动手势,发送 ansi
请帮助我将 midnight commander 中的默认语言从 ru 更改为 en,现在,要以英语启动 mc,我必须编写 LANG=en_EN。终端中的 UTF-8 mc,但它太长了,我想要 mc
我要mc 查看器 ( mcview ,按 F3 键运行)突出显示我的 C++ 代码。是否可以? 对于编辑( mcedit ,F4 键)我正在使用 vim具有自己的语法突出显示。为了查看,我找不到这样的
我有一个设置为 EST 的服务器,我想知道我需要做什么来创建一个设置为当天午夜但在不同时区的 DateTimeOffset?例如太平洋标准时间? 最佳答案 获取相关TimeZoneInfo . 构造一
我现在能想到的最好的就是这个怪物: >>> datetime.utcnow() \ ... .replace(tzinfo=pytz.UTC) \ ... .astimezone(pytz.t
我有一些日常分析风格的记录来跟踪我网站上的使用情况,它们的工作方式如下: 当“事件”发生时,站点会查找在 Time.now.midnight 创建的记录。 . 如果没有找到这样的记录,则会创建一个新记
如何在 MSYS2 的 Midnight Commander 中启用鼠标支持? 目前,当我单击选项菜单时,控制台中仅出现 6;1M6;1m 之类的控制序列。 当我从同一个 MSYS2 bash she
我有一个按钮,按下后会禁用。我需要弄清楚如何在午夜后或第二天重新启用按钮。 所以我想我需要按钮在按下后在变量中设置日期。然后是一个 if 语句,如果变量与今天的日期不匹配,则启用该按钮。 这会是最好的
我有一位客户希望将午夜表示为前一天的结束时间。 例子 var date = DateTime.Parse("1/27/2010 0:00"); Console.WriteLine(date.ToStr
也许是一个愚蠢的问题,但如何在 Midnight Commander 中过滤目录? 例如,我有一个文件夹,里面有很多目录,命名如下: holidays (2016) birthdays (2016)
我最近使用 LocalDate.atStartOfDay() 回答了一些问题和 LocalDate.atTime(LocalTime.MIN) . 我想知道为什么没有 LocalDate.atEndO
在某些多媒体元数据中,可能存在以秒为单位的日期时间UTC 时间 1904 年 1 月 1 日午夜。 据我所知,C/C++ 标准库中的日期时间函数通常基于 1970-1-1 午夜,至少在 Visual
我正在使用在 JavaScript 中运行的 24 小时倒数计时器。目前,它使用秒作为其基本度量。我在这里列出了 86400,但我想计算每天午夜之前还有多少秒,EST (-5)。有人可以演示我如何定义
当我在 Midnight Commander 中的 .ts 文件上按 F3 键时,我收到消息: Please install either mplayer or mpv to get informat
我得到了以下数据集: data mean(times(data$wake_time)) [1] 08:20:12 但是当我对变量 sleep_time 做同样的事情时,就会发生这种情况: > mea
我是不是漏掉了什么? Apple 提供的方法似乎只适用于 UTC,无论机器的时区默认值如何,或者您将其设置为什么。 这是我得到的输出: Output: 2013-02-01 10:41:24.152
我有一个计算的开始/结束时间,我正在尝试进行计算,但在查看结束时间是否在开始时间后的第二天凌晨 12 点之前时遇到问题。另外,我需要计算开始时间过去了多少天。 我有:开始日期、结束日期 我需要: -
对于 python 日志模块中的 TimedRotatingFileHandler,when='D' 和 when='midnight' 有什么区别? 官方文档上查不到。 最佳答案 TimedRota
我是一名优秀的程序员,十分优秀!