【问题标题】:Convert NSDate to String in iOS Swift [duplicate]在iOS Swift中将NSDate转换为字符串[重复]
【发布时间】:2017-07-20 08:42:08
【问题描述】:

我正在尝试将NSDate 转换为String,然后更改格式。但是当我将NSDate 传递给String 时,它会产生空格。

 let formatter = DateFormatter()
 let myString = (String(describing: date))
 formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
 let yourDate: Date? = formatter.date(from: myString)
 formatter.dateFormat = "dd-MMM-yyyy"
 print(yourDate)

【问题讨论】:

  • 显示你的 date ,它是当前日期,否则
  • 不是当前日期,我是从 Datepicker 获取的
  • 显示Datepicker结果

标签: ios swift swift3 nsdateformatter


【解决方案1】:

您从Apple Dateformatter Document 获取详细信息。如果您想为您的 dateString 设置日期格式,请参阅此 link ,您可以获取here 的详细日期格式 例如,喜欢

let formatter = DateFormatter()
// initially set the format based on your datepicker date / server String
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let myString = formatter.string(from: Date()) // string purpose I add here 
// convert your string to date
let yourDate = formatter.date(from: myString)
//then again set the date format whhich type of output you need
formatter.dateFormat = "dd-MMM-yyyy"
// again convert your date to string
let myStringafd = formatter.string(from: yourDate!)

print(myStringafd)

你得到的输出为

【讨论】:

  • 但是日期没有正确的格式,我们需要根据我们的需求进行转换
  • 感谢 Anbu 的工作
【解决方案2】:

您更新的代码。更新它。

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let myString = formatter.string(from: date as Date)
let yourDate: Date? = formatter.date(from: myString)
formatter.dateFormat = "dd-MMM-yyyy"
print(yourDate!)

【讨论】:

  • 但 yourDate 来自数据类型
【解决方案3】:

分配DateFormatter后需要给出格式化字符串 然后你可以像这样转换为字符串

var date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let myString = formatter.string(from: date)
let yourDate: Date? = formatter.date(from: myString)
formatter.dateFormat = "dd-MMM-yyyy"
let updatedString = formatter.string(from: yourDate!)
print(updatedString)

输出

2017 年 3 月 1 日

【讨论】:

    【解决方案4】:

    在将 Date 转换为 String 时,我总是使用此代码。 (斯威夫特 3)

    extension Date
    {
        func toString( dateFormat format  : String ) -> String
        {
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = format
            return dateFormatter.string(from: self)
        }
    
    }
    

    然后像这样调用。 .

    let today = Date()
    today.toString(dateFormat: "dd-MM")
    

    【讨论】:

    • 迄今为止最简单的方法。当您实际上不需要时,日期格式化程序只是面向对象的编程。
    • toString 保留关键字。必须将其更改为其他内容。 ;)
    • 是的,我讨厌工厂对象。比如为什么?让我在对象上调用一个方法。我认为它们在 2000 年代初期很酷。
    【解决方案5】:

    你可以使用这个扩展:

    extension Date {
    
        func toString(withFormat format: String) -> String {
            let formatter = DateFormatter()
            formatter.dateFormat = format
            let myString = formatter.string(from: self)
            let yourDate = formatter.date(from: myString)
            formatter.dateFormat = format
    
            return formatter.string(from: yourDate!)
        }
    }
    

    并像这样在您的视图控制器中使用它(将 替换为您的格式):

    yourString = yourDate.toString(withFormat: "yyyy")
    

    【讨论】:

      【解决方案6】:

      创建格式化程序时要记住的一点是,尽可能重用相同的实例,因为创建格式化程序的计算成本相当高。以下是我经常用于应用程序的模式,我可以在应用程序范围内共享相同的格式化程序,适应 from NSHipster

      extension DateFormatter {
      
          static var sharedDateFormatter: DateFormatter = {
              let dateFormatter = DateFormatter()   
              // Add your formatter configuration here     
              dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
              return dateFormatter
          }()
      }
      

      用法:

      let dateString = DateFormatter.sharedDateFormatter.string(from: Date())
      

      【讨论】:

        【解决方案7】:

        DateFormatter 为那些懒得修改格式化字符串的人提供了一些出厂日期样式。如果您不需要自定义样式,这里有另一种选择:

        extension Date {  
          func asString(style: DateFormatter.Style) -> String {
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = style
            return dateFormatter.string(from: self)
          }
        }
        

        这为您提供了以下样式:

        short, medium, long, full
        

        示例用法:

        let myDate = Date()
        myDate.asString(style: .full)   // Wednesday, January 10, 2018
        myDate.asString(style: .long)   // January 10, 2018
        myDate.asString(style: .medium) // Jan 10, 2018
        myDate.asString(style: .short)  // 1/10/18
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-07
          • 1970-01-01
          • 1970-01-01
          • 2011-01-19
          相关资源
          最近更新 更多