我正在尝试获取本周的第一天(比如说本周,我应该获取 2015-09-13)。
但是我在苹果提供的源代码中找不到合适的函数。
代码应该是这样的......
print(getFirstDay(40)) // Should print 27
func getFirstDay(weekNumber:Int)->Int?{
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
if let todayDate = formatter.dateFromString(weekNumber) {
let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let myComponents = myCalendar.dateFromComponents(.weekOfYear)
let date = myComponents.date
return date
} else {
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
然而,上面的代码不起作用(显然),但我认为应该是在正确的方向上。
我怎样才能做到这一点?
/* 不重要 */ 我正在尝试在表格视图中创建一种日历应用程序,该应用程序由 4 周的部分分隔,我想知道新一周从哪一天开始。
Swift 中有没有方便的方法来表示,例如,15 个月大于 1 年,1 周小于 10 天?我觉得DateComponents最能代表我的需求,所以我需要这样的东西:
DateComponents(year: 1) > DateComponents(month: 15) // => false
DateComponents(day: 10) > DateComponents(weekOfMonth: 1) // => true
Run Code Online (Sandbox Code Playgroud)
但据我了解,目前在 swift DateComponents 中是不具有可比性的(二元运算符“>”不能应用于两个“DateComponents”操作数)。
所以也许任何人都可以帮助我找到纯粹的快速解决方案,或者使用一些库?先感谢您!
我正在开发一个显示当前月份的日历视图(Cocoa macOS 应用程序)。当我尝试计算给定日期的周数时,我根据日历和区域设置得到不同的结果。
2021 年 1 月 1 日,一些调用返回week 0,其他调用返回week 1:
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let jan2021 = formatter.date(from: "2021-01-01")!
var deCalendar = Calendar(identifier: .gregorian)
deCalendar.locale = Locale(identifier: "de_de")
var usCalendar = Calendar(identifier: .gregorian)
usCalendar.locale = Locale(identifier: "en_us")
var deIsoCalendar = Calendar(identifier: .iso8601)
deIsoCalendar.locale = Locale(identifier: "de_de")
var usIso = Calendar(identifier: .iso8601)
usIso.locale = Locale(identifier: "en_us")
deCalendar.component(.weekOfMonth, from: jan2021) // 0
deIsoCalendar.component(.weekOfMonth, from: jan2021) // 0
usCalendar.component(.weekOfMonth, from: jan2021) // 1 ??
usIso.component(.weekOfMonth, …Run Code Online (Sandbox Code Playgroud) 我正在尝试将其DateComponentsFormatter与新的 Foundation 格式化程序一起使用。要格式化日期,我可以这样做:
Date.now.formatted(.dateTime.hour().minute().second())
// 5:03:17 PM
Run Code Online (Sandbox Code Playgroud)
但是,我正在尝试使用这个新的 API 来使用DateComponentsFormatter:
let duration: TimeInterval = 0
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
formatter.allowedUnits = [.minute, .second]
formatter.zeroFormattingBehavior = [.pad]
let formattedDuration = formatter.string(from: 0)
// 00:00
Run Code Online (Sandbox Code Playgroud)
如何使用新的 Foundation 格式化程序 API 来DateComponentsFormatter实现此目的?
duration formatter nsdatecomponents swift nsdatecomponentsformatter
我正在创建这样的日期:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY"];
NSInteger year = [[dateFormatter stringFromDate:[NSDate date]] intValue];
NSLog(@"NSInteger YEAR : %d\n", year);
//minutes, hours, day and month are initialized elsewhere...
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:year];
[comps setMonth:month];
[comps setDay:day];
[comps setHour:hours];
[comps setMinute:minutes];
NSDate *sampleDate = [gregorian dateFromComponents:comps];
NSLog(@"sampleDate YEAR : %d\n", [[dateFormatter stringFromDate:sampleDate] intValue]);
Run Code Online (Sandbox Code Playgroud)
我的问题是,当日期是1月1日或1月2日,这一年是不正确的..这应该是2010年(因为我今天检索),但实际上是2009年......我不明白为什么!这只发生在那两天......
你知道为什么会这样吗?先感谢您.
目前,我正在使用以下小数分钟记录两个事件之间的时间:
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDate *date = [NSDate date];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];
CGFloat hour = [dateComponents hour];
CGFloat minute = [dateComponents minute];
CGFloat second = [dateComponents second];
//set start time in decimal minutes
CGFloat startTime = ((hour*3600.0)+(minute*60.0)+(second))*.016666;
//do work...
//set end time in decimal minutes
CGFloat endTime = ((hour*3600.0)+(minute*60.0)+(second))*.016666;
//calculate time elapsed in decimal minutes
CGFloat totalTime = …Run Code Online (Sandbox Code Playgroud) 如何才能获得本周的当前周数以及周一和周日的日期?
当我想要24小时格式的日期时,我会看到05:00等小时.如何删除前0到5:00?我试过这个:
NSDateFormatter *fhours = [[NSDateFormatter alloc] init];
[fhours setTimeStyle:NSDateFormatterShortStyle];
mystring = [fhours stringFromDate:newDate];
[fhours release];
Run Code Online (Sandbox Code Playgroud) 我知道这个问题被问了一百万次,我找不到解决办法.问题是:我正在修改一个NSDate以返回当月的第一天的日期或下个月的第一天的日期.它似乎工作正常,除了一件事:它给予时间减去2或3小时.
码:
NSCalendar *theCalendar = [NSCalendar currentCalendar];
int comp = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *theComp = [theCalendar components:comp fromDate:date];
[theComp setTimeZone:[NSTimeZone systemTimeZone]];
switch (roundingMode) {
case FIRST_OF_MONTH:
[theComp setDay:1];
return [theCalendar dateFromComponents:theComp];
case FIRST_OF_NEXT_MONTH:
[theComp setMonth:theComp.month+1];
[theComp setDay:1];
return [theCalendar dateFromComponents:theComp];
}
Run Code Online (Sandbox Code Playgroud)
这是调试器(gdb)输出:
(gdb) po theComp
<NSDateComponents: 0x6e26170>
TimeZone: Europe/Kiev (EET) offset 7200
Calendar Year: 2012
Month: 3
Day: 1
(gdb) po date
2012-03-12 13:05:22 +0000
(gdb) po [theCalendar dateFromComponents:theComp]
2012-02-29 22:00:00 +0000
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
谢谢.
我想在本周的第一天获得每个人的特定区域设置.例如,周日美国周开始周日和周一其他国家.
我想在星期一开始为大家开始,这是因为我想将它用于SQLQuery.
我有这个:
NSDate *weekDay = [NSDate date]; //any date in the week in which to calculate the first or last weekday
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:weekDay];
[components setDay:([components day]-([components weekday]-[[NSCalendar currentCalendar] firstWeekday]))];
NSDate *firstWeekday = [gregorian dateFromComponents:components];
NSDate *lastWeekday = [[gregorian dateFromComponents:components] dateByAddingTimeInterval:7 * 24 * 3600 - 1];
NSLog(@"first - %@ \nlast - %@", firstWeekday, lastWeekday);
Run Code Online (Sandbox Code Playgroud)
如果你的语言环境周从星期一开始,但是如果从星期日开始,那么它可以正常工作.
所以想象今天是2015年10月11日周日地区将返回第11周的第一天,最后一天,17周一地区将返回第5周的第一天,即最后一天11
我想在我的应用程序执行的任何地方返回第二个选项.
谢谢.最好的祝福.
nsdatecomponents ×10
nsdate ×6
objective-c ×6
swift ×4
iphone ×2
nscalendar ×2
calendar ×1
cocoa ×1
date ×1
duration ×1
formatter ×1
ios ×1
locale ×1
time ×1