标签: nsdatecomponents

在 Swift 中使用 Weeknumber 获取一周的第一天

我正在尝试获取本周的第一天(比如说本周,我应该获取 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 周的部分分隔,我想知道新一周从哪一天开始。

calendar nsdate nsdatecomponents swift

2
推荐指数
1
解决办法
7500
查看次数

快速比较 DateComponents

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”操作数)。

所以也许任何人都可以帮助我找到纯粹的快速解决方案,或者使用一些库?先感谢您!

date nsdatecomponents swift

2
推荐指数
1
解决办法
2446
查看次数

Swift DateComponents weekOfMonth 返回错误值

我正在开发一个显示当前月份的日历视图(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)

cocoa nscalendar nsdatecomponents swift

2
推荐指数
1
解决办法
766
查看次数

如何使用新的 Foundation 格式化方法来格式化时间间隔?

我正在尝试将其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

2
推荐指数
1
解决办法
3012
查看次数

创建1月1日和2日的NSDate时的奇怪行为

我正在创建这样的日期:

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年......我不明白为什么!这只发生在那两天......

你知道为什么会这样吗?先感谢您.

iphone objective-c nsdate nscalendar nsdatecomponents

1
推荐指数
1
解决办法
553
查看次数

获得更准确的时间测量

目前,我正在使用以下小数分钟记录两个事件之间的时间:

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)

time objective-c nsdatecomponents

1
推荐指数
1
解决办法
1051
查看次数

1
推荐指数
1
解决办法
6125
查看次数

NSDate 24h格式:从小时开始删除第一个'0'

当我想要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)

iphone objective-c nsdate nsdateformatter nsdatecomponents

1
推荐指数
1
解决办法
829
查看次数

NSDate和NSDateComponents返回错误的日期

我知道这个问题被问了一百万次,我找不到解决办法.问题是:我正在修改一个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)

任何帮助将不胜感激.

谢谢.

objective-c nsdate nsdatecomponents ios

1
推荐指数
1
解决办法
1252
查看次数

在objective-c中获取一周的第一天和最后一天

我想在本周的第一天获得每个人的特定区域设置.例如,周日美国周开始周日和周一其他国家.

我想在星期一开始为大家开始,这是因为我想将它用于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

我想在我的应用程序执行的任何地方返回第二个选项.

谢谢.最好的祝福.

locale objective-c nsdate nsdateformatter nsdatecomponents

1
推荐指数
1
解决办法
2200
查看次数