【问题标题】:How to get date from static string?如何从静态字符串中获取日期?
【发布时间】:2019-11-22 12:38:33
【问题描述】:

我想像下面的代码一样获得完整的日期,

func findDate(date: Date)
{
        let format1: DateFormatter = DateFormatter()
        format1.dateFormat = "yyyy-MM-dd"
        let onlyDate = format1.string(from: date) // Here date is like 2019-11-21 

        let dateStr = "\(onlyDate) 10:00 AM"
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm a"
        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        dateFormatter.calendar = NSCalendar.current
        dateFormatter.timeZone = TimeZone.current

        let newDate = dateFormatter.date(from: dateStr)
        print(newDate) // It returns nil

        dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
        let newDateStrInUTC = dateFormatter.string(from: newDate ?? Date()) // Not proper due to newDate = nil
}

findDate 函数date 中,参数的日期类似于2019-11-21 18:30:00 +0000。我想在该日期添加我的自定义时间(上午 10:00)。

我从FSCalender 收到了这个日期 (2019-11-21 18:30:00 +0000)。

我想要这样的输出2019-11-21 12:00 PM

【问题讨论】:

  • 这能回答你的问题吗? stackoverflow.com/questions/29465205/…
  • 你想要这样的输出吗 - 2019-11-21 18:30:00 PM
  • 在您的 findDate 函数中 - 为什么要传递 +0000?
  • 你还没有理解我的问题。我的问题不在于+0000。 @RipaSaha

标签: ios swift nsdateformatter fscalendar


【解决方案1】:

试试这个代码。它将更改时间组件而不更改日期。

func findDate(date: Date)
{
    let calendar = Calendar.current
    let timeString = "10:00 AM"
    let formatter = DateFormatter()
    formatter.dateFormat = "hh:mm a"
    let customDate = formatter.date(from: timeString)
    let hour = calendar.component(.hour, from: customDate!)
    let min = calendar.component(.minute, from: customDate!)
    let sec = calendar.component(.second, from: customDate!)
    let resultDate = Calendar.current.date(bySettingHour: hour, minute: min, second: sec, of: date)
    print(resultDate!)
}

现在您可以根据需要使用 resultDate 了。还要根据您的需要处理这些选项。

【讨论】:

  • 我有像“10:00 AM”这样的时间字符串。如果我想根据您的回答设置时间组件,那么我必须将小时和分钟与时间字符串分开,并且我必须设置 24 小时时间格式,但我有 AM、PM 格式。为此,我必须编写一些杂乱的代码。我想要简单的方法来获得完整的日期。 @Fahad Masood。
【解决方案2】:

问题在于findDate(date: Date) 函数中的以下行。

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm a"

将其替换为以下,您的函数应该开始按预期工作。

dateFormatter.dateFormat = "yyyy-MM-dd hh:mm a"

说明:

HH 用于将日期设置为 24 小时格式。

如果您想以 AM/PM 的 12 小时格式显示日期,请使用小 hh

当您将10:00 AM 附加到您的onlyDate 字符串时。您应该使用hh:mm a 将字符串正确转换为日期。

希望对你有帮助。

【讨论】:

  • 谢谢,它有效。我忘记了,只写HH 而不是hh。再次感谢您的关注。
【解决方案3】:

试试下面这个:

let dateTimeToConvert = yourDateTimeHere
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_EN")
formatter.timeZone = TimeZone.current
formatter.dateFormat = "YYYY-MM-dd HH:mm a"
formatter.amSymbol = "AM"
formatter.pmSymbol = "PM"
let converted = formatter.date(from: "\(dateTimeToConvert)")
print(converted)

注意,我使用的语言环境不同,只需使用您的。我还使用了日期时间来进行转换。但是您可以通过简单地在日期转换后添加时间来实现您想要的。

你也可以像这样搞乱日期时间结构

format = "HH:mm: a 'on' MMMM dd, yyyy"

这种格式使用时会是这样的

“2019 年 1 月 12 日上午 9:01”

【讨论】:

    猜你喜欢
    • 2015-05-13
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多